textview 在TableviewCell自适应

提问
1.自适应cell高度,你会几种?
2.约束,局部,适配 你会几种?

  1. textview 是否会自定义高度。

这里textview实现的cell IOS 8 自适应方法。 使用Masonry布局,使用runtimer给分类,进行动态添加方法,和交换方法。
整体的逻辑,textview ,首先自适应高度,然后把高度和输入的字符用block 的方式,传到cell里,viewController通过代理事件,进行更新自适应高度!
我试过很多方法,和各种回调,还是不能达到预期的效果,就是解决不了cell跟着更新!(这个很皮啊!)
难点,在于textview,和cell的结合,textview怎么样才能实时的自适应来适应高度,这里肯定想要了用KVO KVC 观察着啊,但是这些我都无法很巧妙和结合起来使用,也没有达到预期的效果bug一大推! 然后去github上找了找,发现尽然用到runtimer! 于是就下了狠心一定要把这个东西给弄懂!
下面我一步一步的解读下来

首先我们看,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;
//创建了一个cell,设置了一个代理。给控件赋值了!
LSTextViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.delegate = self;
cell.textView.text = self.dataSource[indexPath.row];
cell.label.text = self.titls[indexPath.row];

//通过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;
}

//将对象anObject插入数组的index元素
[self.dataSource replaceObjectAtIndex:indexPath.row withObject:text];
}
//更新
-(void)textViewCell:(LSTextViewCell)cell textHeightChange:(NSString)text{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
//在上面,就实例化出来了cell,赋值,遵从了一个delegate;代理分别是一个更新和取值的方法。

//在来看cell这个控件做了啥
控件的添加我就不说了!
-(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 是否为空,判断是否响应了 dalegate方法
if (self.delegate && [self.delegate respondsToSelector:@selector(textViewCell:textChange:)]) {
//代理传值,这个是text改变!
//这个是更新tableview
[self.delegate textViewCell:self textChange:self.textView.text];

}
}
这个方法就是限制text的,给viewcontroller的text ,做了一个限制字符的输入!
[self.textView setHeightDidChangeBlock:^(NSString *text, CGFloat height) {

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

}];
//高度改变,这个就把text 传出去了。。
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(textViewCell:textHeightChange:)]) {
[weakSelf.delegate textViewCell:weakSelf textHeightChange:text];

}

[weakSelf layoutIfNeeded];
}];
//这里也只是改变约束,设置自适应
[self.textView setTextDidSetBlock:^(NSString *text, CGFloat textHeight) {
[weakSelf.textView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_greaterThanOrEqualTo(@(textHeight)).priority(888);

}];

[weakSelf layoutIfNeeded];
}];

上面就算完了,逻辑都没在里面写的,重头戏来了。。
自定义的textview,主要做了写什么呢?
首先设置本身的属性让他不能够滚动自适应起来来。
监听Text属性值的变化
sizeThatFits 这个方法返回实际的尺寸,ceil 在向上取整
在判断是否 高度变化,给他传出去给cell去修改约束
可以说到这里就已经结束了一切的代码了。你的cell 和textview都已经可以自适应了。
但是他还是不完美的,他不能设置占位符,没有提示符。
这样的话,就只有使用runtime来设置了。。
其实说白了,就给他动态添加属性就行了,不过这个你不能乱添加你要看下需要的属性是不是能够跟你拿来做临时的UI 能够很好的结合,这样的话,你写起来就方便!
提示符,提示符的颜色,和花字体,全部都用一个lable来代替! 因为labe全部都有相同的属性!这样就很方便了。。我直接set方法在我内部修改就OK了。
然后你得把lable的frame算出来,还有是否显示。(这里方法有很多种)
作者用的确实,比较难的! 使用观察者 不知道为什么作者那么喜欢观察者模式!(个人认为观察者是比较麻烦的,还有很容易出问题),作者这里就会出问题,因为你要考虑到他的销毁!
这里作者有来搞runtime!
他把方法dealloc方法交互,去销毁观察者!和通知!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容