iOS 帶有placeholder清钥、clearButton和自動(dòng)計(jì)數(shù)的textView

由于項(xiàng)目中許多地方用到textView,并且要有placeholder和自動(dòng)計(jì)數(shù)放闺、字?jǐn)?shù)限制祟昭,所以自己就想著寫一個(gè),可以方便很多地方調(diào)用怖侦。

演示.gif
1.先新建一個(gè)繼承UITextView的文件篡悟,主要是在這里實(shí)現(xiàn)placeholder、clearButton以及自動(dòng)計(jì)數(shù)控件的通用類設(shè)置匾寝,還有一些代理方法:
@property (nonatomic, strong) NSString *placeholder;
@property (nonatomic, strong) UIColor *placeholderColor;
@property (nonatomic, strong) UIFont *placeholderFont;

//允許輸入的最大長(zhǎng)度
@property (nonatomic, assign) NSInteger maxLength;
//是否顯示 計(jì)數(shù)器 label
@property (nonatomic, assign) BOOL showWordCountLabel;
-(void)setPlaceholder:(NSString *)placeholder
{
    _placeholder = placeholder;
    [self setNeedsDisplay];
}

-(void)setPlaceholderFont:(UIFont *)placeholderFont
{
    _placeholderFont = placeholderFont;
    [self setNeedsDisplay];
}

-(void)setPlaceholderColor:(UIColor *)placeholderColor
{
    _placeholderColor = placeholderColor;
    [self setNeedsDisplay];
}

2.建一個(gè)繼承UIView的文件搬葬,在這里設(shè)置屬性和回調(diào)方法,把上面創(chuàng)建的頭文件導(dǎo)入進(jìn)來艳悔,如下方法:
-(void)textViewDidChange:(UITextView *)textView
{
    [self textViewTextLengthChange:textView.text.length];
    
    self.maxTextCount = 60;
    
    NSString *toBeString = textView.text;
    
    NSString *lang = [(UITextInputMode*)[[UITextInputMode activeInputModes] firstObject] primaryLanguage]; // 鍵盤輸入模式
    if ([lang isEqualToString:@"zh-Hans"]) { // 簡(jiǎn)體中文輸入急凰,包括簡(jiǎn)體拼音,健體五筆很钓,簡(jiǎn)體手寫
        UITextRange *selectedRange = [textView markedTextRange];
        //獲取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 沒有高亮選擇的字香府,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
        if (!position) {
            if (toBeString.length >= self.maxTextCount) {
                textView.text = [toBeString substringToIndex:self.maxTextCount];
            }
            self.countLabel.text=[NSString stringWithFormat:@"(%lu/%@)",(unsigned long)_textView.text.length, @(self.maxTextCount)];
            [self changeTextWithTextColor:[UIColor orangeColor] OfLabel:self.countLabel withLocation:1 andLength:self.countLabel.text.length-5];
            
            
        } // 有高亮選擇的字符串,則暫不對(duì)文字進(jìn)行統(tǒng)計(jì)和限制
        else{
            
        }
    }
    // 中文輸入法以外的直接對(duì)其統(tǒng)計(jì)限制即可码倦,不考慮其他語種情況
    else{
        if (toBeString.length >= self.maxTextCount) {
            textView.text = [toBeString substringToIndex:self.maxTextCount];
        }
        self.countLabel.text=[NSString stringWithFormat:@"(%lu/%@)",(unsigned long)_textView.text.length, @(self.maxTextCount)];
        [self changeTextWithTextColor:[UIColor orangeColor] OfLabel:self.countLabel withLocation:1 andLength:self.countLabel.text.length-5];
    }
    
    if ([_delegate respondsToSelector:@selector(textViewDidChange:)]) {
        [_delegate textViewDidChange:textView];
    }
}

  • 這里進(jìn)行了一個(gè)高亮判斷和輸入法的判斷企孩,主要是在計(jì)數(shù)的時(shí)候,能夠在選中高亮文字之后再執(zhí)行袁稽,這樣就不會(huì)造成輸入字?jǐn)?shù)達(dá)到最大限制時(shí)計(jì)數(shù)label顯示不正確勿璃,或者是鍵盤直接不能用了,達(dá)到的效果就是字?jǐn)?shù)達(dá)到限制時(shí),鍵盤還能輸入推汽,textView不再輸入或高亮選中無效
3.在需要的地方調(diào)用就可以了
 //textView
    LALCustomTextView *customTextView =[[NSBundle mainBundle] loadNibNamed:@"LALCustomTextView" owner:self options:nil].lastObject;
    
    [self.view addSubview:customTextView];
    customTextView.delegate = self;
    customTextView.clearButtonType = ClearButtonAppearWhenEditing;
    [customTextView setPlaceholder:@"編輯新通知,60字以內(nèi)..." contentText:_inputText maxTextCount:60];
    __weak typeof (self) weakSelf = self;
    customTextView.frame = CGRectMake(weakSelf.view.frame.origin.x, 0, weakSelf.view.frame.size.width, 200);

具體代碼可直接去下載补疑,有錯(cuò)誤或改進(jìn)的地方,請(qǐng)直接@我歹撒,不吝賜教莲组。
代碼傳送門:demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市暖夭,隨后出現(xiàn)的幾起案子锹杈,更是在濱河造成了極大的恐慌,老刑警劉巖迈着,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竭望,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡裕菠,警方通過查閱死者的電腦和手機(jī)咬清,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旧烧,你說我怎么就攤上這事影钉。” “怎么了粪滤?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵斧拍,是天一觀的道長(zhǎng)雀扶。 經(jīng)常有香客問我杖小,道長(zhǎng),這世上最難降的妖魔是什么愚墓? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任予权,我火速辦了婚禮,結(jié)果婚禮上浪册,老公的妹妹穿的比我還像新娘扫腺。我一直安慰自己,他們只是感情好村象,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布笆环。 她就那樣靜靜地躺著,像睡著了一般厚者。 火紅的嫁衣襯著肌膚如雪躁劣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天库菲,我揣著相機(jī)與錄音账忘,去河邊找鬼。 笑死熙宇,一個(gè)胖子當(dāng)著我的面吹牛鳖擒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烫止,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒋荚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了馆蠕?” 一聲冷哼從身側(cè)響起期升,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荆几,沒想到半個(gè)月后吓妆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吨铸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年行拢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诞吱。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舟奠,死狀恐怖竭缝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沼瘫,我是刑警寧澤抬纸,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耿戚,受9級(jí)特大地震影響湿故,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膜蛔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一坛猪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皂股,春花似錦墅茉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蘑辑,卻和暖如春洋机,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背以躯。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工槐秧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忧设。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓刁标,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親址晕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膀懈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件谨垃、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程启搂,因...
    小菜c閱讀 6,419評(píng)論 0 17
  • 這只是我在學(xué)Android過程中對(duì)于所學(xué)知識(shí)的鞏固和方便日后查詢的學(xué)習(xí)筆記,能幫助到有需要的和我一樣的初學(xué)者就更好...
    TakeItEasyJQ閱讀 372評(píng)論 0 0
  • 我生氣刘陶,我真的生氣胳赌,我不懂,為什么匙隔,為什么不告訴我疑苫,關(guān)于你前女友的任何。 可能是嫉妒讓我發(fā)狂,你說捍掺,你倆大學(xué)在一起...
    你是馬里奧嘛閱讀 205評(píng)論 0 0
  • 下班之后撼短,走在綠油油的小巷里⊥ξ穑回家的幸福感洋溢在臉上曲横。 最大的安慰,莫過于下班之后不瓶,坐在路邊禾嫉,吃頓巴巴適適的火鍋與串串。
    小腳丫丫丫閱讀 165評(píng)論 0 1