当从cellForRowAtIndexPath
调用textView becomeFirstResponder
时返回false,为什么?becomeFirstResponder在cellForRowAtIndexPath中不起作用
但从其他方法,即从didSelectRowAtIndexPath
它的作品。
是否因为我使用iOS 8引入了UITableViewAutomaticDimension
行高??
当从cellForRowAtIndexPath
调用textView becomeFirstResponder
时返回false,为什么?becomeFirstResponder在cellForRowAtIndexPath中不起作用
但从其他方法,即从didSelectRowAtIndexPath
它的作品。
是否因为我使用iOS 8引入了UITableViewAutomaticDimension
行高??
当您检查文档时说它必须位于视图层次结构中。我认为在cellForRowAtIndexPath方法中,文本视图尚未附加到层次结构中,但返回单元格时。
你可以调用这个方法来创建响应者对象,比如查看第一响应者 。但是,如果它是 是视图层次结构的一部分,则应该只在该视图上调用它。如果视图的窗口属性包含一个 UIWindow对象,则它已安装在视图层次结构中;如果它 返回nil,则该视图将从任何层次结构中分离出来。
尝试在layoutSubviews等表格视图单元格的自定义方法中调用becomeFirstResponder,因为此时文本视图将被添加到视图层次结构中。如果你在cellForRowAtIndexPath方法中调用它,那么文本视图还没有被添加到视图层次结构中,它不起作用。
- (void)layoutSubviews{
// Initialization code
if ([self.textView becomeFirstResponder]) {
NSLog(@"yes");
}
}
当awakeFromNib被调用时,单元格是否肯定会成为视图层次结构的一部分?我认为awakeFromNib是在插座和操作连接之后调用的,但在视图插入到超级视图之前。 (但我不确定。) –
你是对的!!!在调用awakeFromNib时,它不能成为层次结构的一部分。我将编辑我的回答 –
感谢您通知我! @DuncanC –
劫持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只调用一次
有趣的设定,当单元格高度手动它的工作原理调用from cellforrowatindexpath –
@JánosSure。 Height是一个对视图有意义的属性,无论它是否是视图层次结构的一部分。但是,视图不能是第一响应者,除非它是视图层次结构的一部分。 –
当手动设置高度时,作品意味着成为第一响应者作品 –