【发布时间】:2015-09-11 15:09:48
【问题描述】:
当从cellForRowAtIndexPath调用textViewbecomeFirstResponder时返回false,为什么?
但是通过其他方法,即来自didSelectRowAtIndexPath,它可以工作。
是否与我使用 iOS 8 引入的UITableViewAutomaticDimension 行高方法有关?!
【问题讨论】:
标签: ios uitableview uitextview
当从cellForRowAtIndexPath调用textViewbecomeFirstResponder时返回false,为什么?
但是通过其他方法,即来自didSelectRowAtIndexPath,它可以工作。
是否与我使用 iOS 8 引入的UITableViewAutomaticDimension 行高方法有关?!
【问题讨论】:
标签: ios uitableview uitextview
当您查看文档时,它说视图必须位于视图层次结构中。我认为在 cellForRowAtIndexPath 方法中,文本视图尚未附加到层次结构,但是当返回单元格时。
您可以调用此方法来使响应者对象(例如视图) 急救人员。但是,您应该只在该视图上调用它,如果它 是视图层次结构的一部分。如果视图的 window 属性持有 UIWindow 对象,它已安装在视图层次结构中;如果它 返回 nil,视图与任何层次结构分离。
【讨论】:
尝试在表格视图单元格的自定义方法(如 layoutSubviews)中调用 becomeFirstResponder,因为此时文本视图将被添加到视图层次结构中。如果您在 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 更昂贵,因为它被称为无数次 而 viewDidAppear 只被调用一次
【讨论】: