UITextView和cell根据textview的内容动态更新高度



我一直有一个关于UITextView在自定义单元格内的问题。除了我的问题外,textView还可以完美地工作。我有UITextViewDelegate功能设置当textview发生某些事情时,我有那些功能连接起来。

我想知道如何让我的自定义单元动态增加它的高度作为用户类型。一旦用户点击textview的行结束,也有textview自动添加另一行。我在网上搜索了一段时间,这个问题的大多数例子都是用objective c编写的。没有太多的swift代码。我将感激任何帮助。

我将单元格连接到tableview文件中。

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      let cell: cellCustom =  the_TableView.dequeueReusableCellWithIdentifier("cell") as! cellCustom
        return cell
 }

在自定义单元格文件中,我设置了委托…

func textViewDidChange(textView: UITextView) {

    }

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

        return true
    }

我已经尝试了一些事情,如……

self.textview.sizeToFit() 
self.the_TableView.rowHeight = UITableViewAutomaticDimension
        self.the_TableView.estimatedRowHeight = 47

当我这样做的时候,textview拿走了所有的文本,但没有增加大小,直到我辞去了它的第一个响应者,并滚动单元格消失。然后当细胞反弹回来时,它会更新。

我已经添加了所有的约束,项目没有风险或错误,并且工作完美。

澄清一下,我希望uitextview根据用户类型的内容改变高度,而他们正在输入它,这意味着自定义单元格和表视图将不得不更新。想想iPhone上的clear应用吧。就像这样。单元格会随着用户键入类型而动态更新,增加高度,并在用户到达末尾时添加新行。这就是我想要的。

虽然我对开发并不陌生,但我以前从未真正达到过开发的这一点。任何帮助都将非常感激。由于我在另一个文件中有我的自定义单元格,我很难从tableview文件访问我的单元格元素。我想我还是个新手。谢谢你的阅读。

这也适用于ios 7

这个进入tableviewcell

protocol HeightForTextView {
    func heightOfTextView(height: CGFloat)
    
}
class TableViewCell: UITableViewCell {
    @IBOutlet weak var textView: UITextView!
    
    weak var delgate: HeightForTextView?
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    func textViewDidChange(textView: UITextView) {
        
        var fixedWidth: CGFloat = textView.frame.size.width
        var newSize: CGSize = textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat.max))
        
        if let iuDelegate = self.delgate {
            
            iuDelegate.heightOfTextView(newSize.height)
        }
        
        
    }
}

你的tableview控制器应该是

 class TableViewController: UITableViewController,HeightForTextView {
    
        var textViewHeight = CGFloat()
        
    //In your cell for row method set your your delegate 
 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell
    cell.delgate = self
    return cell
}

//delegate method
    func heightOfTextView(height: CGFloat) {
        
    textViewHeight = height
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
        
    }
 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            
            return textViewHeight + 70
    }
    
    }

最新更新