2017-04-14 56 views
1

在有多個字段的登錄表單上工作。當用戶點擊下一個/完成(默認按鈕)鍵盤下一個文本字段應該成爲第一響應者。 TextField在UITableView單元格中。當用戶單擊完成按鈕時,我獲取下一個單元格並將其文本字段作爲第一響應者。但是如果下一個單元格不可見,那麼下一個textField不會成爲第一個響應者。如何解決這個問題。使作爲第一響應者不可見的單元格的文本字段

func makeTextFieldFirstResponder(textField:UITextField) -> Bool { 
    let row = textField.tag 
     let indxPath = IndexPath(row: textField.tag + 1, section: 0) 
    if let cell = tblEditViewDetail.cellForRow(at: indxPath) as? InputCell { 
     cell.txtField.firstResponder() 
} 

}

+0

您的代碼或屏幕截圖可能出現卡住的位置 –

+0

CellForRow即將到達零。 –

回答

3

the docs for cellForRow :

表示表,或零的小區,如果小區是不可見的或indexPath超出範圍的對象。

因此,如果單元格不可見,返回值應爲nil。您應該先使用scrollToRow,然後獲取單元格並設置第一響應者。

0

讓我們做個訣竅吧。

1)保存你的第一個響應者的單元格的下一個文本字段索引。

var respondTextFieldIndex: Int = 0 

func makeTextFieldFirstResponder(textField:UITextField) -> Bool { 
    let row = textField.tag 
    let indxPath = IndexPath(row: textField.tag + 1, section: 0) 

    respondTextFieldIndex= textField.tag + 1 

    if let cell = tblEditViewDetail.cellForRow(at: indxPath) as? InputCell { 
    cell.txtField.firstResponder() 
} 

2)cellForRow功能,如果你的下一個單元格具有指數等於respondTextFieldIndex讓我們把它firstResponder

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = *Your work here*. 

    if indexPath.row == respondTextFieldIndex { 
     cell.txtField.firstResponder() 
    } 
} 
+0

當te單元出隊時,這將設置文本字段作爲第一響應者。根據我的理解,OP希望這會自動發生。 – Losiowaty

-1

使用下面的代碼此代碼對你有用。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return arrData.count 
    } 


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "AddEventCell", for: indexPath) as! AddEventCell 
     cell.txtName.tag = indexPath.row 
     cell.txtName.delegate = self 
     // Configure the cell... 

     return cell 
    } 

    public func textFieldShouldReturn(_ textField: UITextField) -> Bool 
    { 
     if textField.tag < arrData.count - 1 { 
      textField.resignFirstResponder() 
      tbl.viewWithTag(textField.tag+1)?.becomeFirstResponder() 
     } 
     else 
     { 
      textField.resignFirstResponder() 
     } 
     return true 
    } 
+0

這是如何解決OP問題的? 'textfieldShouldReturn'中的'tbl'是什麼?它如何引用一個無形的細胞? – Losiowaty

+0

是的,此代碼適用於Invisible cell –

相關問題