分享

textView放在自定义cell里面

 sunvins 2017-03-02

首先我讲讲我做的这个自定义cell,像箭头部分这个label是共有的东西,展示的是一样的,所以我弄了一个父类cell,根据右边所需的不同展示方法,利用继承来实现

在父类的layoutsuviews做约束的时候

[self.fieldnameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(10); make.centerY.equalTo(self); }];

标题label上下是居中于cell,与cell左边有10边距  然后我有个该cell的子类

- (void)layoutSubviews

{

    [superlayoutSubviews];

    [self.valueOptionTextViewmas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.equalTo(self.fieldnameLabel.mas_right).offset(10);

        make.right.equalTo(self.uonLabel.mas_left).offset(-10);

        make.top.equalTo(self.contentView.mas_top).offset(10);

        make.bottom.equalTo(self.contentView.mas_bottom).offset(-10);

    }];

}

valueOptionTextView 是子类增加的一个值数据textView 这个textView点击的时候会弹出一个选项框,选择对应的值,,然后显示在textView上面,但是出现
valueOptionTextView的值要是过长达到换行的长度,就会出现挡住标题label的情况

在初始化子类cell的时候我调用了[self layoutIfNeeded]  发现没有用, 找了好久好久终于发现,要在父类cell里面的初始化cell方法里面调用  [self layoutIfNeeded]   

哦哦哦,差点讲偏题了,我这次要讲的是让cell自适应文本框高度....  接下来开始讲重点 :  

1,textView有个属性 scrollEnabled  要设置为NO;

2,设置tableview的时候  添加这两行代码:

    self.tableView.rowHeight = UITableViewAutomaticDimension;

self.tableView.estimatedRowHeight = 100;

3,textView的底部要和contentView底部有个约束

初始化cell

@implementation TemplateRichtextCell - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithReuseIdentifier:reuseIdentifier]) { UITextView *valueTextView = [[UITextView alloc]init]; valueTextView.scrollEnabled = NO; valueTextView.textAlignment = NSTextAlignmentRight; valueTextView.textColor = [UIColor darkGrayColor]; valueTextView.font = [UIFont systemFontOfSize:15]; [self.contentView addSubview:valueTextView]; self.valueTextView = valueTextView; self.valueTextView.delegate = self; } return self; }

控件布局约束

- (void)layoutSubviews { [super layoutSubviews]; [self.valueTextView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.fieldnameLabel.mas_right).offset(10); make.right.equalTo(self.uonLabel.mas_left).offset(-10); make.top.equalTo(self.contentView.mas_top).offset(10); make.bottom.equalTo(self.contentView.mas_bottom).offset(-10); }]; }

要实现动态输入文字让cell随时更改高度 要用tableView beginUpdates和endUpdates两方法进行刷新,那么要什么时候进行刷新呢?要达到实时,所以我想到

textViewDidChange代理方法,这个会在文字改变的时候一直调用,所以在这个代理方法里面进行刷新是最合适不过的了,那么,我们又怎么能拿到tableView来进行调用更新呢?

其实我们可以用while循环查找cell的父控件来找到tableView  所以喽,就是这样:

- (void)textViewDidChange:(UITextView *)textView { CGRect bounds = textView.bounds; // 计算 text view 的高度 CGSize maxSize = CGSizeMake(bounds.size.width, CGFLOAT_MAX); CGSize newSize = [textView sizeThatFits:maxSize]; bounds.size = newSize; textView.bounds = bounds; // 让 table view 重新计算高度 UITableView *tableView = [self tableView]; [tableView beginUpdates]; [tableView endUpdates]; } - (UITableView *)tableView { UIView *tableView = self.superview; while (![tableView isKindOfClass:[UITableView class]] && tableView) { tableView = tableView.superview; } return (UITableView *)tableView; }

到此,完成自适应;

0

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多