UITextView和单元格根据textview的内容动态更新高度?

时间:2015-07-17 22:21:16

标签: ios iphone swift uitableview cell

我在自定义单元格中遇到了有关UITextView的问题。除了我的问题,textView完美无缺。 我有UITextViewDelegate方法设置,所以当textview发生某些事情时,我将这些方法连接起来。

我想知道如何让我的自定义单元格随着用户的类型动态增加它的高度。一旦用户点击文本视图行的末尾,也可以让textview自动添加另一行。 我在网上搜索了一段时间,这个问题的大多数例子都是客观的。没有太多的快速代码。我将不胜感激任何帮助。

我将我的单元格连接到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根据用户在键入内容时输入的内容来更改高度,这意味着自定义单元格和tableview必须更新。想想iPhone上的清晰应用程序。就是这样。单元格在用户输入时动态更新,高度增加,而在用户到达结尾时添加新行。这就是我要达到的目标。

虽然我并不擅长以任何方式进行开发,但我之前从未真正开发过这一点。任何帮助将非常感激。由于我将自定义单元格放在另一个文件中,因此无法从tableview文件中访问我的单元格元素。我猜还是新手。感谢您阅读本文。

1 个答案:

答案 0 :(得分:10)

这也适用于ios 7

这会进入你的tableviewcell

protocol HeightForTextView {
    func heightOfTextView(height: CGFloat)

}

class TableViewCell: UITableViewCell {

    @IBOutlet weak var textView: UITextView!

    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
    }

    }