【发布时间】:2017-04-21 15:34:12
【问题描述】:
例如,我有一个符合 UITextFieldDelegate 协议并从该协议继承方法的视图控制器..
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
// do some stuff...
return true
}
在 main.storyboard 文件中,我将文本字段控制拖动到此视图控制器,然后单击“委托”以让项目知道我的视图控制器现在是此文本字段的委托。
现在...我知道这个视图控制器现在在我的 UITextField 中称为“delegate”的属性下被引用,但是在我的视图控制器中,我的文本字段中有多个方法和属性。
文本字段是如何知道作为 textField(_:shouldChangeCharactersIn:replacementString) 函数的第一个参数传入的?与任何其他随机的、不相关的功能相反?
谢谢
奖金相关问题 在我的视图控制器(UITextField 的委托)中,有一个@IBAction 目标函数,其源是相同的文本字段输入对象。现在...我在该 IBAction 函数中具有基本上将输入值的输入 UPON 编辑的内容打印到屏幕上的功能。
但是,通过这个新的委托函数,我已经实现了一些功能,如果有两个相同的字符,则不会更改输入的值。当我运行我的应用程序时,我可以看到因为委托功能正在工作,当两个相同的数字出现在文本字段中时,文本字段中的值不会更新,因此甚至不会调用 @IBAction 函数(或者至少,控制台不会打印任何内容)。
在我看来,这表明委托函数优先于 @IBAction 函数。
只需根据观察结果寻找正确或错误的答案。谢谢!
【问题讨论】:
-
您的文本字段将调用它必须调用的委托方法(因此可以是所有方法)。每种方法都有不同的目的。如果你只需要使用
textField(_:shouldChangeCharactersIn:replacementString),那么你可以只实现这个委托方法。 -
如果你想开始实现 Apple 的东西(iOS、macOS、tvOS 等),你必须了解更多关于 delegation 的知识,因为它是这些技术中使用的基本模式跨度>