自定義UITextView(OC)

iOS UITextView 屬性


有這樣一種需求镜豹,在UITextView的屬性里是沒有像UITextFiled一樣的占位文字的砚偶,那么要讓UITextView擁有占位文字涩赢,需要什么思路呢啸箫?

解決方案如下:

  • 分析:如同UITextField一樣,當沒有輸入時顯示占位文字堂鲜,當有輸入時隨即消失栈雳,當輸入完再刪除時,又立刻出現(xiàn)
  • 由上分析缔莲,可以肯定哥纫,這個占位文字我選擇一個UILable控件,因為它能夠顯示文字痴奏,而且便于修改占位文字屬性
  • 通過分析蛀骇,用通知或者代理來監(jiān)聽UITextView屬性的改變

具體代碼如下:

OC代碼

@interface TCTextView () <UITextViewDelegate>

@property (nonatomic, strong) UILabel *placeholderLabel;

@end

@implementation TCTextView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setupUI];
    }
    return self;
}

#pragma mark - UI 

- (void)setupUI {
    [self addSubview:self.textView];
    [self.textView addSubview:self.placeholderLabel];
    
    // 此處使用了Masonry自動布局厌秒,可以替換為計算frame或者其他
    [self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self);
        make.bottom.equalTo(self);
        make.left.equalTo(self).offset(18.0);
        make.right.equalTo(self).offset(-18.0);
    }];
    
    [self.placeholderLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.and.left.equalTo(self.textView).offset(8.0);
    }];

}

#pragma mark - public

- (void)setupTextViewBorderColor:(UIColor *)color borderWidth:(CGFloat)bordWidth {
    if (color != nil) {
        self.textView.layer.borderColor = color.CGColor;
    }
    
    if (bordWidth >= 0) {
        self.textView.layer.borderWidth = bordWidth;
    }
}

#pragma mark - setter

- (void)setPlaceholderLabelText:(NSString *)placeholderLabelText {
    if ([_placeholderLabelText isEqualToString:placeholderLabelText]) {
        return;
    }
    _placeholderLabelText = placeholderLabelText;
    self.placeholderLabel.text = _placeholderLabelText;
}



#pragma mark - UITextViewDelegate

- (void)textViewDidBeginEditing:(UITextView *)textView {
    self.textView.layer.borderColor = COLOR_RGB(29, 169, 158).CGColor;
}

- (void)textViewDidChange:(UITextView *)textView {
    self.placeholderLabel.text = @"";
}

- (void)textViewDidEndEditing:(UITextView *)textView {
    if (textView.text.length > 0) {
        self.placeholderLabel.text = @"";
        return;
    }
    self.placeholderLabel.text = self.placeholderLabelText ?: @"請輸入內(nèi)容(限制50字)";
}

//- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
//    if ([text isEqualToString:@"\n"]) {
//        [self.textView endEditing:YES];
//        
//        return NO;
//    }
//    return YES;
//}

//- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
//    
//}


#pragma mark - getter

- (UITextView *)textView {
    if (!_textView) {
        _textView = [[UITextView alloc] init];
        _textView.font = [UIFont systemFontOfSize:20.0];
        _textView.layer.borderColor = COLOR_RGB(224, 224, 224).CGColor;
        _textView.layer.borderWidth = 1.0;
        _textView.layer.cornerRadius = 4.0;
        _textView.delegate = self;
        _textView.textColor = COLOR_RGB(69, 69, 69);
    }
    return _textView;
}

- (UILabel *)placeholderLabel {
    if (!_placeholderLabel) {
        _placeholderLabel = [UILabel tc_createLabelWithTitle:@"請輸入內(nèi)容(限制50字)" font:20.0 color:COLOR_RGB(135, 135, 135) alignment:NSTextAlignmentLeft];
        _placeholderLabel.backgroundColor = [UIColor clearColor];
    }
    return _placeholderLabel;
}

寫在最后

TCTextView是繼承自UITextView的自定義子類,如果使用擅憔,直接創(chuàng)建復(fù)制粘貼即可鸵闪。當然有什么問題,可以留言給我雕欺,O(∩_∩)O謝謝岛马!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屠列,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伞矩,老刑警劉巖笛洛,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乃坤,居然都是意外死亡苛让,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門湿诊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱杰,“玉大人,你說我怎么就攤上這事厅须》禄” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵朗和,是天一觀的道長错沽。 經(jīng)常有香客問我,道長眶拉,這世上最難降的妖魔是什么千埃? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮忆植,結(jié)果婚禮上放可,老公的妹妹穿的比我還像新娘。我一直安慰自己朝刊,他們只是感情好耀里,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坞古,像睡著了一般备韧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痪枫,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天织堂,我揣著相機與錄音叠艳,去河邊找鬼。 笑死易阳,一個胖子當著我的面吹牛附较,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潦俺,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拒课,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了事示?” 一聲冷哼從身側(cè)響起早像,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肖爵,沒想到半個月后卢鹦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡劝堪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年冀自,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秒啦。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬粗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出余境,到底是詐尸還是另有隱情驻呐,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布葛超,位于F島的核電站暴氏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绣张。R本人自食惡果不足惜答渔,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侥涵。 院中可真熱鬧沼撕,春花似錦、人聲如沸芜飘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗦明。三九已至笼沥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奔浅。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工馆纳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汹桦。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓鲁驶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舞骆。 傳聞我的和親對象是個殘疾皇子钥弯,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容