首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS UITableView 自定義 Cell 中 TextField 輸入完成自動跳轉下一個輸入框實現方案

     編輯:程式設計綜合問答

場景描述

表單頁面包含多個自定義 Cell,每個 Cell 含一個 UITextField。用戶輸入完手機號等內容後,期望鍵盤自動彈出並聚焦到下一個 Cell 的 TextField,無需手動點擊。

核心實現思路

  1. 監聽當前 TextField 的 UIControlEventEditingDidEndOnExit 事件(返回鍵觸發)。
  2. 在事件處理中計算下一個需聚焦的 IndexPath。
  3. 調用 tableView.reloadData() 確保 Cell 存在(若為動態創建)。
  4. 通過 performSelector:withObject:afterDelay: 延遲極短時間(如 0.01s)執行聚焦,避免鍵盤動畫衝突。
  5. 在延遲方法中取得目標 Cell,調用 becomeFirstResponder()。

關鍵代碼示例

// 當前 TextField 返回鍵點擊
@objc func textFieldDidEndOnExit(_ textField: UITextField) {
    // 1. 計算下一個 IndexPath
    guard let currentIndexPath = indexPathForTextField(textField),
          let nextIndexPath = nextIndexPath(after: currentIndexPath) else { return }

    // 2. 刷新確保 Cell 可見
    tableView.reloadData()

    // 3. 延遲聚焦
    perform(#selector(focusNextCell(_:)), with: nextIndexPath, afterDelay: 0.01)
}

@objc func focusNextCell(_ indexPath: IndexPath) {
    guard let cell = tableView.cellForRow(at: indexPath) as? CustomCell else { return }
    cell.textField.becomeFirstResponder()
}

注意事項

  • 若 Cell 複用導致 cellForRowAt 返回 nil,需先 scrollToRow(at:at:animated:) 滾動到可見區域。
  • 最後一個輸入框應設置 returnKeyType = .done 並隱藏鍵盤。
  • iOS 13+ 建議使用 UITextFieldDelegate 的 textFieldShouldReturn(_:) 替代 Target-Action,邏輯更清晰。

進階優化

封裝為通用 FormTableViewManager,內部維护輸入框順序數組,自動處理鍵盤工具欄「上一個/下一個」按鈕、自動滾動避免遮擋、數據驗證等,提升復用性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved