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

标签 ios iphone swift uitableview cell

我一直遇到有关自定义单元格内的 UITextView 的问题。除了我的问题,textView 工作得很好。 我设置了 UITextViewDelegate 方法,因此当 textview 出现问题时,我连接了这些方法。

我想知道如何让我的自定义单元格在用户键入时动态增加它的高度。一旦用户点击了 textview 行的末尾,也让 textview 自动添加另一行。 在网上找了一段时间,这个问题的例子大部分都在objective c中。快速代码不多。我将不胜感激任何帮助。

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

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

      let cell: cellCustom =  the_TableView.dequeueReusableCellWithIdentifier("cell") as! cellCustom

        return cell
 }

在自定义单元格文件中,我设置了委托(delegate)...

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 获取了所有文本,但直到我辞去它的第一响应者并向上滚动以使单元格消失之前, TextView 都没有增加大小。然后,当细胞反弹回来时,它会更新。

我已经添加了所有约束,该项目的风险或错误为零,并且运行完美。

澄清一下,我希望 uitextview 根据用户键入的内容更改高度,这意味着自定义单元格和 tableview 必须更新。想想 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)
        }
        
        
    }

}

your tableview controller should be

 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
    }
    
    }

关于ios - UITextView 和单元格根据 textview 的内容动态更新高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485558/

相关文章:

ios - 如何使用 Swift 4 设置 UITextField 边框从左到右带有圆角的渐变

ios - 在 iOS 中更改 UIViewController 时保持蓝牙连接

iphone - Xcode App 模拟启动黑屏

iphone - Tab 激活时刷新 View

iphone - NSData返回Null问题

swift - 如何使用 UISlider 更改 View 的选定背景颜色的不透明度?

objective-c - iOS 对象 C。提出正确的解决方案?

iOS + React Native - 内存泄漏

ios - 如何使用 react-native 版本 0.48.0 将 SafeAreaView 安装到我的项目中?

ios - NavigationBar 为一个 View 设置 TitleColor