關(guān)于UITextView的問題

本文只講述UITextView的一些常見問題以及對應(yīng)的解決辦法辕录,廢話不說直接開講:

一昵仅、給UITextView設(shè)置一個placeholder括授,最簡單的方法通過Runtime獲取私有屬性設(shè)置,當(dāng)然你不嫌麻煩還可以通過代理方法或者給textView加label等方法實現(xiàn)岩饼。

UILabel *placeHolderLabel = [[UILabel alloc] init];
placeHolderLabel.text = @"請輸入內(nèi)容";
placeHolderLabel.numberOfLines = 0;
placeHolderLabel.textColor = [UIColor lightGrayColor];
// 必須要設(shè)置字體,否則會導(dǎo)致label位置不準(zhǔn)確
placeHolderLabel.font = textView.font;
[textView addSubview:placeHolderLabel];
// 使用runtime賦值給私有屬性
[textView setValue:placeHolderLabel forKey:@"_placeholderLabel"];

二薛夜、UITextView內(nèi)邊距問題

UITextView默認(rèn)文本與邊框之間會有間距籍茧,文本距離邊距距離為8,如果你不想要或者想修改這個值梯澜,一句話搞定

textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);

三寞冯、設(shè)置行間距和字間距

// 行間距
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 5;
NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:17],
                             NSParagraphStyleAttributeName:paragraphStyle,
                             NSKernAttributeName:@10 // 字間距
                             };
textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];

四、光標(biāo)大小修改

自定義textView晚伙,重寫 - (CGRect)caretRectForPosition:(UITextPosition *)position 返回光標(biāo)大小和位置即可

- (CGRect)caretRectForPosition:(UITextPosition *)position {
    CGRect originalRect = [super caretRectForPosition:position];
    originalRect.size.height = self.font.lineHeight + 2;
    return originalRect;
}

五吮龄、富文本樣式消失問題

如果給textView設(shè)置了富文本,一旦富文本被全部刪除了咆疗,再輸入文字便恢復(fù)成普通文本樣式了漓帚,就不再有富文本的樣式了。為了解決這個問題午磁,我是在textView的代理方法 - (void)textViewDidChange:(UITextView *)textView 中檢測文本重新修改樣式(如果只是字體和顏色這樣的可以通過設(shè)置UITextView的屬性來達(dá)到的尝抖,就沒必要這么麻煩了。但是需要設(shè)置行間距字間距或者實時解析項目里的表情迅皇,就可能需要這么做了)


- (void)textViewDidChange:(UITextView *)textView
{
    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:textView.text];
    [attString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14],
                               NSForegroundColorAttributeName:[UIColor redColor]
                               }
                       range:NSMakeRange(0, attString.length)];
    textView.attributedText = attString;
}

六昧辽、系統(tǒng)中文輸入法問題

問題五中的解決方式存在一個問題,就是當(dāng)鍵盤為系統(tǒng)默認(rèn)中文鍵盤時登颓,當(dāng)你輸入一個字母時搅荞,輸入框中的內(nèi)容會出現(xiàn)問題,以下截圖是我分別輸入了 g h 后的顯示結(jié)果

上面出現(xiàn)的情況就是蘋果會將英文作為備選文字先填入輸入框中框咙,解決辦法就是如果輸入框有備選文字就不進(jìn)行富文本處理咕痛,將問題五修改后如下:

- (void)textViewDidChange:(UITextView *)textView
{
    UITextRange *range = [textView markedTextRange];
    UITextPosition *position = [textView positionFromPosition:range.start offset:0];
    if (!position) {
        NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:textView.text];
        [attString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14],
                                   NSForegroundColorAttributeName:[UIColor redColor]
                                   }
                           range:NSMakeRange(0, attString.length)];
        textView.attributedText = attString;
    }
}

七、UITextView放在UITableView上

場景:UITableView上的多個Cell都有UITextView喇嘱,類似于寫文章頁面(當(dāng)然可以采用markdown編寫暇检,這里只是介紹用法)

1、光標(biāo)始終需要顯示在鍵盤上邊
CGRect cursorRect = [textView caretRectForPosition:textView.selectedTextRange.end];
CGPoint point = [textView convertPoint:cursorRect.origin toView:self.tableView];
CGFloat offsetY = point.y - (self.tableView.size.height - keyboardHeight) + cursorRect.size.height + 10;
offsetY = MAX(0, offsetY);
[self.tableView setContentOffset:CGPointMake(0, offsetY) animated:NO];
2婉称、如果鍵盤上需要放工具欄块仆,跟隨鍵盤移動构蹬。當(dāng)textView在響應(yīng)中,刷新列表悔据,同時刷新結(jié)束時textView又需要成為響應(yīng)者庄敛,這時候工具欄會莫名的從上下來。(這種情況不好截圖科汗,當(dāng)你開發(fā)時遇到了知道怎么處理就好了)
// 刷新時關(guān)閉動畫效果即可
[UIView setAnimationsEnabled:NO];
[self.tableView reloadData];
[UIView setAnimationsEnabled:YES];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末藻烤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子头滔,更是在濱河造成了極大的恐慌怖亭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坤检,死亡現(xiàn)場離奇詭異兴猩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)早歇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門倾芝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箭跳,你說我怎么就攤上這事晨另。” “怎么了谱姓?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵借尿,是天一觀的道長。 經(jīng)常有香客問我屉来,道長垛玻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任奶躯,我火速辦了婚禮帚桩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘹黔。我一直安慰自己账嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布儡蔓。 她就那樣靜靜地躺著郭蕉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喂江。 梳的紋絲不亂的頭發(fā)上召锈,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音获询,去河邊找鬼涨岁。 笑死拐袜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梢薪。 我是一名探鬼主播蹬铺,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秉撇!你這毒婦竟也來了甜攀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤琐馆,失蹤者是張志新(化名)和其女友劉穎规阀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘦麸,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谁撼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞎暑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡与帆,死狀恐怖了赌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玄糟,我是刑警寧澤勿她,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站阵翎,受9級特大地震影響逢并,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郭卫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一砍聊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰军,春花似錦玻蝌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贰盗,卻和暖如春许饿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舵盈。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工陋率, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留球化,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓翘贮,卻偏偏與公主長得像赊窥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狸页,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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