例如,我有一个符合UITextFieldDelegate协议的视图控制器,并从该协议继承了一个方法。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
// do some stuff...
return true
}
在main.storyboard文件中,我将文本字段控制拖动到此视图控制器,然后单击“委托”让项目知道我的视图控制器现在是此文本字段的委托。
现在......我知道这个视图控制器现在在我的UITextField中称为“委托”属性,但在我的视图控制器中,我的文本字段中有多个方法和属性。
如何将text字段作为textField(_:shouldChangeCharactersIn:replacementString)函数中的第一个参数传入?与任何其他随机,无关的函数相反?
由于
奖金相关问题 在我的视图控制器(UITextField的委托)中,有一个@IBAction目标函数,其源是相同的文本字段输入对象。现在......我在IBAction函数中有功能,基本上在屏幕上输入输入值的输入UPON编辑内容。
但是,使用这个新的委托函数,我已经实现了一些功能,如果有两个相同的字符,则不更改输入的值。当我运行我的应用程序时,我可以看到,因为委托功能正在工作,当两个相同的数字在文本字段中时,值不会在文本字段中更新,因此甚至不会调用@IBAction函数(或者至少,没有任何东西被打印到控制台)。
对我来说,这表明委托函数优先于@IBAction函数。
只是在那个观察中寻找真实或错误的答案。谢谢!
答案 0 :(得分:1)
此方法的documentation说明:
只要用户操作导致其文本发生更改,文本字段就会调用此方法。
因此,当用户操作导致UITextField的文本发生更改时,UITextField代码会检查UITextField对象是否具有委托,如果有,则检查该委托对象是否实现textField(_:shouldChangeCharactersIn: replacementString:)
。如果是,则UITextField调用该方法,将UITextField对象作为第一个参数传递。
答案 1 :(得分:1)
内部UITextField
代码相当于:
self.delegate?.textfield(self, shouldChangeCharactersIn: rangeThatChanged, replacementString: stringThatChanged)
因此,文本字段代码调用其委托上的特定函数,传递所需的参数,包括对其自身的引用。这与在对象引用上调用任何函数没什么不同。
关于你的'奖金问题',委托功能的名称是应该 ChangeCharactersIn。此函数通过返回true或false来指示是否发生更改。如果返回false,则丢弃更改。如果没有更改,则不会调用更改操作。