2015-09-11 26 views

回答

2

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

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

+0

有趣的设定,当单元格高度手动它的工作原理调用from cellforrowatindexpath –

+0

@JánosSure。 Height是一个对视图有意义的属性,无论它是否是视图层次结构的一部分。但是,视图不能是第一响应者,除非它是视图层次结构的一部分。 –

+0

当手动设置高度时,作品意味着成为第一响应者作品 –

0

尝试在layoutSubviews等表格视图单元格的自定义方法中调用becomeFirstResponder,因为此时文本视图将被添加到视图层次结构中。如果你在cellForRowAtIndexPath方法中调用它,那么文本视图还没有被添加到视图层次结构中,它不起作用。

- (void)layoutSubviews{ 
    // Initialization code 

    if ([self.textView becomeFirstResponder]) { 

     NSLog(@"yes"); 
    } 
} 
+1

当awakeFromNib被调用时,单元格是否肯定会成为视图层次结构的一部分?我认为awakeFromNib是在插座和操作连接之后调用的,但在视图插入到超级视图之前。 (但我不确定。) –

+0

你是对的!!!在调用awakeFromNib时,它不能成为层次结构的一部分。我将编辑我的回答 –

+0

感谢您通知我! @DuncanC –

-1

劫持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只调用一次

相关问题