我一直有一个关于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
}
}