iOS -自定義鍵盤系列之一怎樣自定義輸入文本框

前言####

我們系統可以輸入內容的控件有UITextField和UITextView,兩者特點有:
UITextField:可以設置占位文字砍的,但是不能輸入多行。
UITextView:不可以設置占位文字莺治,但是可以輸入多行廓鞠。
但是往往我們的需求是兩者的結合體:設置占位文字,可以輸入多行谣旁。所以我們需要自定義輸入文本框床佳。

UITextView內部參考結構:

UITextView內部結構.png
UITextView內部結構.png

自定義的輸入框效果


自定義TextView.gif
自定義TextView.gif

怎樣自定義輸入框####

1、自定義輸入框是繼承UITextView的子類(原因:UITextField只能輸入單行)榄审,但是我們需要加入占位文字功能

2砌们、自定義的輸入文本框需要具有哪些功能?網上雖然有很多自定義控件,但是API完全不夠使用浪感,我覺得完整的輸入文本框應該具有以下功能:

 /**
  * 設置占位文字
  */
@property (nonatomic, copy) NSString *placeholder;
/**
 *  設置占位文字顏色
 */
@property (nonatomic, strong) UIColor *placeholderColor;
/**
 *  占位文字的X偏移量
 */
@property (nonatomic, assign) CGFloat placeHolderOffsetX;
/**
 *  占位文字的Y偏移量
 */
@property (nonatomic, assign) CGFloat placeHolderOffsetY;
/**
 *  光標的偏移量
 */
@property (nonatomic, assign) UIOffset  cursorOffset;
/**
 *  是否隱藏
 */
@property (nonatomic, assign)  BOOL placeHolderHidden;

3角溃、具體實現
3.1 初始化的時候增加占位文字控件,并且增加監(jiān)聽輸入文字的通知

 - (instancetype)initWithFrame:(CGRect)frame
{
   if(self = [super initWithFrame:frame])
 {
  [self addSubview:self.placeholderLabel];
  self.alwaysBounceVertical = YES;
  self.font = [UIFont systemFontOfSize:14.0];
  self.placeholderColor = [UIColor grayColor];
  self.placeholderLabel.frame = CGRectMake(5, 10, 0, 0);
  // 監(jiān)聽文字改變
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:nil];
}
return self;
}

3.2 核心代碼就是計算占位文字的Size來設置占位Label的frame

  -(void)computePlaceholderLabelSize
 {
CGFloat maxWidth = [UIScreen mainScreen].bounds.size.width - 2 * (self.placeholderLabel.frame.origin.x - self.placeHolderOffsetX);
CGSize maxSize = CGSizeMake(maxWidth, MAXFLOAT);
CGSize computeSize = [self.placeholder boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : self.font} context:nil].size; 
CGRect frame = self.placeholderLabel.frame;
frame.size = computeSize;
frame.origin.x = self.placeHolderOffsetX + frame.origin.x;
frame.origin.y = self.placeHolderOffsetY + frame.origin.y;
self.placeholderLabel.frame = frame;
 }

3.3 通知監(jiān)聽到輸入文字篮撑,就會自動隱藏占位Label

 - (void)textDidChange
  {
    self.placeHolderHidden = self.hasText;  //這個方法可以實現自定隱藏
  }

注意:有通知减细,必須要移除通知

  - (void)dealloc
{
     [[NSNotificationCenter defaultCenter] removeObserver:self];
 }

3.4 API接口的實現就不做詳細描述,需要查看詳細內容赢笨,請下載demo

自定義輸入框.png
自定義輸入框.png

本demo的集成只需要兩個文件未蝌,耦合性低
詳情代碼請直接下載demo查看:
自定義鍵盤-LZBKeyBoardView

輸入框其他資源:自定義鍵盤系列之二鍵盤自適應響應者

最后贈言###

star 是對我們程序猿最大的鼓勵

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茧妒,隨后出現的幾起案子萧吠,更是在濱河造成了極大的恐慌,老刑警劉巖桐筏,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纸型,死亡現場離奇詭異,居然都是意外死亡梅忌,警方通過查閱死者的電腦和手機狰腌,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牧氮,“玉大人琼腔,你說我怎么就攤上這事□飧穑” “怎么了丹莲?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尸诽。 經常有香客問我甥材,道長,這世上最難降的妖魔是什么性含? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任洲赵,我火速辦了婚禮,結果婚禮上胶滋,老公的妹妹穿的比我還像新娘板鬓。我一直安慰自己,他們只是感情好究恤,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布俭令。 她就那樣靜靜地躺著,像睡著了一般部宿。 火紅的嫁衣襯著肌膚如雪抄腔。 梳的紋絲不亂的頭發(fā)上瓢湃,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音赫蛇,去河邊找鬼绵患。 笑死,一個胖子當著我的面吹牛悟耘,可吹牛的內容都是我干的落蝙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼暂幼,長吁一口氣:“原來是場噩夢啊……” “哼筏勒!你這毒婦竟也來了?” 一聲冷哼從身側響起旺嬉,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤管行,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邪媳,有當地人在樹林里發(fā)現了一具尸體捐顷,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年雨效,在試婚紗的時候發(fā)現自己被綠了迅涮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡设易,死狀恐怖逗柴,靈堂內的尸體忽然破棺而出蛹头,到底是詐尸還是另有隱情顿肺,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布渣蜗,位于F島的核電站屠尊,受9級特大地震影響,放射性物質發(fā)生泄漏耕拷。R本人自食惡果不足惜讼昆,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骚烧。 院中可真熱鬧浸赫,春花似錦、人聲如沸赃绊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碧查。三九已至运敢,卻和暖如春校仑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背传惠。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工迄沫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卦方。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓羊瘩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盼砍。 傳聞我的和親對象是個殘疾皇子困后,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容