becomeFirstResponder和estimatedRowHeight不兼容

时间:2016-08-10 14:33:33

标签: swift uitableview

我的UITableView包含UITableViewCell,其中包含UITextView

我想要两件事:

  1. 用户可以在UITextView中输入文字,其尺寸会根据它增长。
  2. 当用户点击添加按钮时,textView成为第一响应者。
  3. 1.第一个目标已实施为:

    self.tableView.estimatedRowHeight = 44
    self.tableView.rowHeight = UITableViewAutomaticDimension
    
    func textViewDidChange(textView: UITextView) {
        tableView.beginUpdates()
        tableView.endUpdates()
    }
    

    并且效果很好

    2.对于第二件事,我只是写道:

    @IBAction func addButton(sender: AnyObject) {
        let indexPath = NSIndexPath(forRow: 0, inSection: 0)
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyCell
        cell.cellTextView.resignFirstResponder()
        cell.cellTextView.becomeFirstResponder()
    }
    

    它不起作用......: - (

    更奇怪的是,如果我删除上面的第一个指令块(特别是estimatedRowHeight指令),becomeFirstResponder效果很好。

    您是否有任何线索可以执行这两项功能? 谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用cellForRowAtIndexPath方法获取获取单元格:

@IBAction func addButton(sender: AnyObject) {
    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: false) // add this line if you wish to scroll for input
    if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyCell {
        view.endEditing(true)
        cell.cellTextView.becomeFirstResponder()
    }
}