becomeFirstResponder在cellForRowAtIndexPath中不起作用

时间:2015-09-11 15:09:49

标签: ios uitableview uitextview

becomeFirstResponder调用textView cellForRowAtIndexPath时返回false,为什么?

但是从其他方法,即didSelectRowAtIndexPath起作用。

我是否正在使用iOS 8引入UITableViewAutomaticDimension行高方法?!

3 个答案:

答案 0 :(得分:2)

当您检查文档时,它说该视图必须位于视图层次结构中。我认为在cellForRowAtIndexPath方法中,文本视图尚未附加到层次结构,但是在返回单元格时。

  

您可以调用此方法来制作响应者对象,例如查看   急救人员。但是,您应该只在该视图上调用它   是视图层次结构的一部分。如果视图的窗口属性包含   UIWindow对象,它已安装在视图层次结构中;如果它   返回nil,视图与任何层次结构分离。

答案 1 :(得分:0)

尝试在您的表格视图单元格的自定义方法中调用becomeFirstResponder,例如layoutSubviews,因为此时文本视图将添加到视图层次结构中。如果在cellForRowAtIndexPath方法中调用它,则文本视图尚未添加到视图层次结构中,但它不起作用。

 - (void)layoutSubviews{
    // Initialization code

    if ([self.textView becomeFirstResponder]) {

        NSLog(@"yes");
    }
}

答案 2 :(得分:-1)

hijack viewDidAppear出于以下目的:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    let indexPath = NSIndexPath(forRow: whatever, inSection: 0mostlikely)
    if let cell = tableView.cellForRowAtIndexPath( indexPath) as? YourTableViewCellClass {
        cell.textField.becomeFirstResponder()
    }
}

viewDidLayoutSubviews更昂贵,因为它被称为无数次 而viewDidAppear只被调用一次