表單頁面包含多個自定義 Cell,每個 Cell 含一個 UITextField。用戶輸入完手機號等內容後,期望鍵盤自動彈出並聚焦到下一個 Cell 的 TextField,無需手動點擊。
UIControlEventEditingDidEndOnExit 事件(返回鍵觸發)。tableView.reloadData() 確保 Cell 存在(若為動態創建)。performSelector:withObject:afterDelay: 延遲極短時間(如 0.01s)執行聚焦,避免鍵盤動畫衝突。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()
}
cellForRowAt 返回 nil,需先 scrollToRow(at:at:animated:) 滾動到可見區域。returnKeyType = .done 並隱藏鍵盤。UITextFieldDelegate 的 textFieldShouldReturn(_:) 替代 Target-Action,邏輯更清晰。封裝為通用 FormTableViewManager,內部維护輸入框順序數組,自動處理鍵盤工具欄「上一個/下一個」按鈕、自動滾動避免遮擋、數據驗證等,提升復用性。