textview 在TableviewCell自適應(yīng)

提問(wèn)
1.自適應(yīng)cell高度,你會(huì)幾種馁菜?
2.約束茴扁,局部,適配 你會(huì)幾種汪疮?

  1. textview 是否會(huì)自定義高度峭火。

這里textview實(shí)現(xiàn)的cell IOS 8 自適應(yīng)方法。 使用Masonry布局铲咨,使用runtimer給分類躲胳,進(jìn)行動(dòng)態(tài)添加方法,和交換方法纤勒。
整體的邏輯坯苹,textview ,首先自適應(yīng)高度摇天,然后把高度和輸入的字符用block 的方式粹湃,傳到cell里,viewController通過(guò)代理事件泉坐,進(jìn)行更新自適應(yīng)高度为鳄!
我試過(guò)很多方法,和各種回調(diào)腕让,還是不能達(dá)到預(yù)期的效果孤钦,就是解決不了cell跟著更新F缯濉(這個(gè)很皮啊F巍)
難點(diǎn)静袖,在于textview,和cell的結(jié)合俊扭,textview怎么樣才能實(shí)時(shí)的自適應(yīng)來(lái)適應(yīng)高度队橙,這里肯定想要了用KVO KVC 觀察著啊,但是這些我都無(wú)法很巧妙和結(jié)合起來(lái)使用萨惑,也沒(méi)有達(dá)到預(yù)期的效果bug一大推捐康! 然后去github上找了找,發(fā)現(xiàn)盡然用到runtimer庸蔼! 于是就下了狠心一定要把這個(gè)東西給弄懂解总!
下面我一步一步的解讀下來(lái)

首先我們看,viewconeroller做了些啥朱嘴。倾鲫。粗合!
self.dataSource = [NSMutableArray array];
for (NSInteger i = 0; i < 6; i++) {
[self.dataSource addObject:@""];
}
if (!_titls) {
_titls = [NSMutableArray array];
for (int i = 1; i<100; i++) {
[_titls addObject:[NSString stringWithFormat:@"%d.",i]];
}
}
return _titls;
//創(chuàng)建了一個(gè)cell,設(shè)置了一個(gè)代理萍嬉。給控件賦值了!
LSTextViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.delegate = self;
cell.textView.text = self.dataSource[indexPath.row];
cell.label.text = self.titls[indexPath.row];

//通過(guò)cell 的出indexpath隙疚,獲得cell的綁定indexpath
-(void)textViewCell:(LSTextViewCell *)cell textChange:(NSString )text{
NSIndexPath
indexPath = [self.tableView indexPathForCell:cell];
[self.DatasoucerDit setValue:text forKey:[NSString stringWithFormat:@"%ld",indexPath.row]];

if (!indexPath) {
return;
}

//將對(duì)象anObject插入數(shù)組的index元素
[self.dataSource replaceObjectAtIndex:indexPath.row withObject:text];
}
//更新
-(void)textViewCell:(LSTextViewCell)cell textHeightChange:(NSString)text{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
//在上面壤追,就實(shí)例化出來(lái)了cell,賦值,遵從了一個(gè)delegate;代理分別是一個(gè)更新和取值的方法供屉。

//在來(lái)看cell這個(gè)控件做了啥
控件的添加我就不說(shuō)了行冰!
-(void)textViewDidChange:(UITextView *)textView{
if (self.textView.text.length > self.maxNumberWords && self.maxNumberWords > 0) {
self.textView.text = [self.textView.text substringToIndex:self.maxNumberWords-1];
}
//判斷delegate 是否為空,判斷是否響應(yīng)了 dalegate方法
if (self.delegate && [self.delegate respondsToSelector:@selector(textViewCell:textChange:)]) {
//代理傳值,這個(gè)是text改變伶丐!
//這個(gè)是更新tableview
[self.delegate textViewCell:self textChange:self.textView.text];

}
}
這個(gè)方法就是限制text的悼做,給viewcontroller的text ,做了一個(gè)限制字符的輸入!
[self.textView setHeightDidChangeBlock:^(NSString *text, CGFloat height) {

[weakSelf.textView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_greaterThanOrEqualTo(@(height)).priority(888);

}];
//高度改變哗魂,這個(gè)就把text 傳出去了肛走。。
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(textViewCell:textHeightChange:)]) {
[weakSelf.delegate textViewCell:weakSelf textHeightChange:text];

}

[weakSelf layoutIfNeeded];
}];
//這里也只是改變約束录别,設(shè)置自適應(yīng)
[self.textView setTextDidSetBlock:^(NSString *text, CGFloat textHeight) {
[weakSelf.textView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_greaterThanOrEqualTo(@(textHeight)).priority(888);

}];

[weakSelf layoutIfNeeded];
}];

上面就算完了朽色,邏輯都沒(méi)在里面寫的,重頭戲來(lái)了组题。葫男。
自定義的textview,主要做了寫什么呢崔列?
首先設(shè)置本身的屬性讓他不能夠滾動(dòng)自適應(yīng)起來(lái)來(lái)梢褐。
監(jiān)聽(tīng)Text屬性值的變化
sizeThatFits 這個(gè)方法返回實(shí)際的尺寸,ceil 在向上取整
在判斷是否 高度變化,給他傳出去給cell去修改約束
可以說(shuō)到這里就已經(jīng)結(jié)束了一切的代碼了盈咳。你的cell 和textview都已經(jīng)可以自適應(yīng)了趣效。
但是他還是不完美的,他不能設(shè)置占位符猪贪,沒(méi)有提示符跷敬。
這樣的話,就只有使用runtime來(lái)設(shè)置了热押。西傀。
其實(shí)說(shuō)白了,就給他動(dòng)態(tài)添加屬性就行了桶癣,不過(guò)這個(gè)你不能亂添加你要看下需要的屬性是不是能夠跟你拿來(lái)做臨時(shí)的UI 能夠很好的結(jié)合拥褂,這樣的話,你寫起來(lái)就方便牙寞!
提示符饺鹃,提示符的顏色,和花字體间雀,全部都用一個(gè)lable來(lái)代替悔详! 因?yàn)閘abe全部都有相同的屬性!這樣就很方便了惹挟。茄螃。我直接set方法在我內(nèi)部修改就OK了。
然后你得把lable的frame算出來(lái)连锯,還有是否顯示归苍。(這里方法有很多種)
作者用的確實(shí),比較難的运怖! 使用觀察者 不知道為什么作者那么喜歡觀察者模式F雌(個(gè)人認(rèn)為觀察者是比較麻煩的,還有很容易出問(wèn)題)摇展,作者這里就會(huì)出問(wèn)題吻氧,因?yàn)槟阋紤]到他的銷毀!
這里作者有來(lái)搞runtime吗购!
他把方法dealloc方法交互医男,去銷毀觀察者!和通知捻勉!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镀梭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子踱启,更是在濱河造成了極大的恐慌报账,老刑警劉巖研底,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異透罢,居然都是意外死亡榜晦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門羽圃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乾胶,“玉大人,你說(shuō)我怎么就攤上這事朽寞∈读” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵脑融,是天一觀的道長(zhǎng)喻频。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肘迎,這世上最難降的妖魔是什么甥温? 我笑而不...
    開(kāi)封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮妓布,結(jié)果婚禮上姻蚓,老公的妹妹穿的比我還像新娘。我一直安慰自己秋茫,他們只是感情好史简,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肛著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跺讯。 梳的紋絲不亂的頭發(fā)上枢贿,一...
    開(kāi)封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音刀脏,去河邊找鬼局荚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愈污,可吹牛的內(nèi)容都是我干的耀态。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暂雹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼首装!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起杭跪,我...
    開(kāi)封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仙逻,失蹤者是張志新(化名)和其女友劉穎驰吓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體系奉,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檬贰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缺亮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翁涤。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萌踱,靈堂內(nèi)的尸體忽然破棺而出迷雪,到底是詐尸還是另有隱情,我是刑警寧澤虫蝶,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布章咧,位于F島的核電站,受9級(jí)特大地震影響能真,放射性物質(zhì)發(fā)生泄漏赁严。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一粉铐、第九天 我趴在偏房一處隱蔽的房頂上張望疼约。 院中可真熱鬧,春花似錦蝙泼、人聲如沸程剥。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)织鲸。三九已至,卻和暖如春溪胶,著一層夾襖步出監(jiān)牢的瞬間搂擦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工哗脖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瀑踢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓才避,卻偏偏與公主長(zhǎng)得像橱夭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桑逝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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