寫(xiě)在前言:
久了沒(méi)寫(xiě)文章,就會(huì)變得越來(lái)越懶,還會(huì)給自己找各種理由,說(shuō)自己忙,沒(méi)時(shí)間寫(xiě)文章.其實(shí)最近由于受一個(gè)很熱門(mén)的話題困擾-關(guān)于程序猿的年齡的思考,自己有些迷茫,思考了半天也不知道如何是好,程序猿真的是吃青春飯的么?不管了,還是堅(jiān)持2017年的目標(biāo),堅(jiān)持寫(xiě)自己開(kāi)發(fā)日記吧.
之前有個(gè)項(xiàng)目里面大量用到了tableview,而且還是表單形式,需要填寫(xiě)一些自定義的數(shù)據(jù),UI要求數(shù)據(jù)輸入框要根據(jù)內(nèi)容大小來(lái)?yè)未?很慶幸,現(xiàn)在項(xiàng)目都是從iOS8適配,所以自然想到了AutoLayout以及tableview的estimatedRowHeight特性.
圖中要求標(biāo)題輸入,當(dāng)輸入內(nèi)容超過(guò)設(shè)計(jì)大小,要自動(dòng)撐大,下面的選項(xiàng)同理.增加選項(xiàng)可以添加更多選項(xiàng).本項(xiàng)目的采用的是SD,以第一個(gè)標(biāo)題輸入框?yàn)槔?
一.添加合適的約束
輸入框這個(gè)Cell的約束添加:
二.TableView的設(shè)置
設(shè)置tableview行高的估算高度:
self.tableView.estimatedRowHeight = 50;
self.tableView.rowHeight = UITableViewAutomaticDimension;
三.自定義可編輯Cell中的設(shè)置
要想對(duì)輸入框的實(shí)時(shí)輸入進(jìn)行輸入框的實(shí)時(shí)改變,就要監(jiān)聽(tīng)textView的輸入事件.
-(void)textViewDidChange:(UITextView *)textView{
CGRect bounds = textView.bounds;
// 計(jì)算 text view 的高度
CGSize maxSize = CGSizeMake(bounds.size.width, CGFLOAT_MAX);
CGSize newSize = [textView sizeThatFits:maxSize];
bounds.size = newSize;
textView.bounds = bounds;
// 讓 table view 重新計(jì)算高度
UITableView *tableView = [self tableView];
[tableView beginUpdates];
[tableView endUpdates];
//輸入框輸入內(nèi)容的回調(diào)
[self.delegate TextEditCellTextChangeWithContentText:textView.text];
}
//獲取當(dāng)前的cell所屬的tableview
- (UITableView *)tableView
{
UIView *tableView = self.superview;
while (![tableView isKindOfClass:[UITableView class]] && tableView) {
tableView = tableView.superview;
}
return (UITableView *)tableView;
}
總結(jié)
這樣一個(gè)自適應(yīng)的TableViewCell就完成了,是不是很簡(jiǎn)單.如果上文有什么不對(duì)的地方,請(qǐng)大家指出,或者有什么問(wèn)題,可以給我留言或者發(fā)消息,大家一起探討,共同進(jìn)步.
寫(xiě)在最后:
最近開(kāi)始學(xué)習(xí)Swift了,Swift已經(jīng)更新到3.0了,已經(jīng)趨于穩(wěn)定,發(fā)現(xiàn)github上越來(lái)越來(lái)的開(kāi)源是Swift寫(xiě)的,已經(jīng)掉隊(duì)的感覺(jué),所以的趕緊跟上.后面會(huì)寫(xiě)一些學(xué)習(xí)Swift筆記.