becomeFirstResponder在cellForRowAtIndexPath中不起作用

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

但是从其他方法,即来自didSelectRowAtIndexPath它可以工作。

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

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

您可以调用此方法来创建响应者对象,例如查看第一响应者。 但是,如果它是视图层次结构的一部分,则只应在该视图上调用它。 如果视图的window属性包含UIWindow对象,则它已安装在视图层次结构中; 如果它返回nil,则视图将从任何层次结构中分离。

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

  - (void)layoutSubviews{ // Initialization code if ([self.textView becomeFirstResponder]) { NSLog(@"yes"); } } 

劫持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更昂贵,因为它被称为gazillion次,而viewDidAppear只被调用一次