gpt4 book ai didi

ios - 委托(delegate) VS IBAction 处理事件 iOS

转载 作者:搜寻专家 更新时间:2023-11-01 06:02:01 25 4
gpt4 key购买 nike

我是 Swift 的新手,也是 iOS 开发的新手。我目前正在努力理解为什么使用委托(delegate)来处理 UI 中发生的事件。

到目前为止,在我正在学习的教程中,我只做过类似以下代码段的事情来处理 UI 事件:

@IBAction func fahrenheitFieldEditingChanged(_ textField: UITextField) {
if let text = textField.text, let value = Double(text) {
fahrenheitValue = Measurement(value: value, unit: .fahrenheit)
} else {
fahrenheitValue = nil
}
}

但现在我正在完成的教程是让我使用委托(delegate)来处理来自同一文本字段的另一个 UI 事件。为什么这样做呢?使用委托(delegate)而不是仅仅编写操作来处理事件有什么意义?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")

if existingTextHasDecimalSeparator != nil, replacementTextHasDecimalSeparator != nil {
return false
} else {
return true
}
}

最佳答案

看看UITextViewDelegate .它会变得更容易理解。

响应编辑通知

func textViewShouldBeginEditing(UITextView)

询问代理是否应该在指定的 TextView 中开始编辑。

func textViewDidBeginEditing(UITextView)

告诉代理指定 TextView 的编辑已经开始。

func textViewShouldEndEditing(UITextView)

询问代理是否应在指定的 TextView 中停止编辑。

func textViewDidEndEditing(UITextView)

告诉代理指定 TextView 的编辑已经结束。


响应文本变化

func textView(UITextView, shouldChangeTextIn: NSRange, replacementText: String)

询问代理是否应在 TextView 中替换指定的文本。

func textViewDidChange(UITextView)

告诉代理指定 TextView 中的文本或属性已被用户更改。


还有很多,我就不复制粘贴了,大家自己看吧。您在这里看到的是您可以根据需要调入的内容。

如果需要,您可以收听并获得用户开始 键入时的回调。或者您可以收听并获得用户结束编辑的回调。

您如何知道用户何时停止或开始使用 IBAction?!


一旦*您将自己设置为委托(delegate)人 (textViewInstance.delegate = self),您就可以选择获取这些回调中的任何一个。

*为了 100% 准确,您需要这样做,但也采用 UITextViewDelegate 协议(protocol),然后使用提到的委托(delegate)回调符合

关于ios - 委托(delegate) VS IBAction 处理事件 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com