跳到主要內容

發表文章

目前顯示的是 2025的文章

iOS TextField 快速點擊導致誤觸鍵盤輸入的解決方案

問題描述 在開發 iOS 應用時,遇到一個棘手的 bug:當 TextField 位於畫面下方時,使用者快速連續點擊多次,會在鍵盤還未完全升起時就誤觸鍵盤按鍵,導致不預期的文字被輸入到 TextField 中。 為什麼這個 Bug 如此難以重現? 起初,這個問題讓人非常困擾,因為: QA 回報 :Bug 描述為「誤擊」,但一般測試方法(點一下 → 等鍵盤跳出 → 再點)很難模擬 關鍵發現 :需要「快速連擊」+ 「鍵盤升起速度較慢」的條件才會觸發 設備差異 : ✅ iPhone 13 (iOS 22):可穩定重現 ❌ iPhone 15 (iOS 18):無法重現 這說明了舊款手機因為效能較低,鍵盤動畫較慢,更容易出現這個問題。 嘗試過的方案(全部失敗) 在尋找解決方案時,我嘗試了三種常見的做法: ❌ 方案 1:使用 isUserInteractionEnabled 控制 @objc func keyboardWillShow(_ notification: Notification) { textField.isUserInteractionEnabled = false } @objc func keyboardDidShow(_ notification: Notification) { textField.isUserInteractionEnabled = true } ❌ 方案 2:使用遮罩層防止誤觸 @objc func keyboardWillShow(_ notification: Notification) { overlayView.isHidden = false } @objc func keyboardDidShow(_ notification: Notification) { overlayView.isHidden = true } ❌ 方案 3:使用 TextField Delegate 控制 func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { return canBeginEditing } 失敗原因分析 這三種方案都有一個致命的缺陷: 所有...