2015-09-11 59 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只調用一次

相關問題