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

标签 ios swift callback delegates ibaction

我是 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/

相关文章:

jquery - 在执行回调之前等待 .each() .getJSON 请求完成

ios - iOS屏幕捕获模糊

ios - 在 iOS 中制作雷达动画的最佳方法

ios - 在圆形路径上为 CAShapeLayer 设置动画

c++ - 回调函数和常规函数有什么区别?

javascript - JS promise : Array of requests

ios - 在 iPhone 中使用 facebook 登录而不重定向到网络浏览器?

iOS : What is the need of register cell before dequeuing in UITableView?

ios - 在 Swift 中使用 iosMath

objective-c - 艺术家如何创建非线性抽象插值渐变图像