一尘不染

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

swift

我在自定义单元格中遇到有关UITextView的问题。除了我的问题,textView的工作原理也很完美。我已经设置了UITextViewDelegate方法,所以当textview发生问题时,我已经连接了那些方法。

我想知道如何让我的自定义单元随着用户的输入而动态增加其高度。一旦用户点击了textview的行尾,也要让textview自动添加另一行。我已经在网上搜索了一段时间,该问题的大多数示例都在目标c中。没有太多快速的代码。我将不胜感激任何帮助。

我已经将自己的单元格连接到了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文件访问单元格元素。我猜还是个新手。感谢您阅读本文。


阅读 187

收藏
2020-07-07

共1个答案

一尘不染

这也适用于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
    }

    }
2020-07-07