當從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是一個對視圖有意義的屬性,無論它是否是視圖層次結構的一部分。但是,視圖不能是第一響應者,除非它是視圖層次結構的一部分。 –
當手動設置高度時,作品意味着成爲第一響應者作品 –