ios 如何使editingDidEnd在用户点击swift返回导航时不触发?

2g32fytz  于 2023-02-20  发布在  iOS
关注(0)|答案(1)|浏览(104)

目前,我在swift文本字段的editingDidEnd方法中遇到问题。我在editingDidEnd函数中有一个模块,用于检查B ViewController中的一些验证。如果验证错误,则会显示弹出窗口/警报。
在这种情况下,当用户正在键入并仍将焦点放在textField上时,用户在导航栏上向后点击。这使得editingDidEnd函数也被调用。因此,页面显示ViewController并显示弹出窗口。
是否有解决此问题的变通方案?我不希望在导航栏中向后点击时显示警报。我的期望是如果用户在导航上向后按,则不会调用editingDidEnd函数
谢谢之前
例如:
B视图控制器

extension bviewcontroller: textfielddelegate {
    
    
    func editingDidEnd(_ value: String, textField: SearchTextField) {
          //showingalert
    }

}
lhcgjxsq

lhcgjxsq1#

您可以向editingDidEnd方法添加guard语句,如下所示。

func editingDidEnd(_ value: String, textField: SearchTextField) {
    guard navigationController?.topViewController is bviewcontroller else {
        print("DON'T SHOW ALERT")
        return
    }
        
    print("SHOW ALERT")
}

我已经用一个包含UITextField的简单视图控制器测试了上面的代码。然而,你的委托方法看起来和标准的UITextFieldDelegate 'textFieldDidEndEditing(_:)方法有些不同。否则我会建议你也尝试一下textFieldDidEndEditing(_:reason:)方法。

相关问题