在XCode中,委派对象如何知道要调用的委托对象上的哪种方法



例如,我有一个符合uitextfielddelegate协议并从该协议继承的方法。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        // do some stuff...
        return true
    }

在Main.Storyboard文件中,我将文本字段控制到此视图控制器,然后单击"委托",以让项目知道我的视图控制器现在是此文本字段的委托。

现在...我知道现在在我的uitextfield中引用了此视图控制器,该属性称为"委托",但是在我的视图控制器中,我在文本字段中有多个方法和属性。

文本字段是如何通过文本字段中的第一个参数传递的(_:syredchangecharactersin:replacementstring)函数?与其他任何随机的无关函数相反?

谢谢

奖金相关问题在我的视图控制器(Uitextfield的委托)中,有一个@ibaction目标函数,其源是同一文本字段输入对象。现在...我具有IBACTIOT功能的功能,可以基本上在屏幕上打印到输入值时的输入内容。

但是,有了这个新的委托功能,如果有两个相同的字符,我已经实现了一些功能,以免更改输入的值。当我运行应用程序时,我可以看到,因为委托功能在工作,当两个相同的数字在文本字段中时,该值不会在文本字段中进行更新,因此,@ibaction函数甚至没有被调用(或者至少没有任何印刷到控制台)。

对我来说,这表明委托功能优先于@ibaction函数。

只是在该观察结果上寻找一个真或错误的答案。谢谢!

UITextField内部的代码等效于:

self.delegate?.textfield(self, shouldChangeCharactersIn: rangeThatChanged, replacementString: stringThatChanged)

因此,文本字段代码在其代表上调用特定函数,传递了所需的参数,包括对自身的引用。在对象引用上调用任何函数没有什么不同。

关于您的"奖励问题",代表函数的名称为 changecharactersin。此功能指示通过返回对还是错来进行更改。如果返回false,则将丢弃更改。如果没有更改,则不会调用更改动作。

此方法的文档说明:

每当用户操作导致其文本更改时,文本字段调用此方法。

因此,当用户操作导致UITEXTFIELD的文本更改时,UITEXTFIELD代码检查以查看UITEXTFIELD对象是否有委托,如果确实如此,是否会委派对象实现textField(_:shouldChangeCharactersIn: replacementString:)。如果确实如此,uitextfield调用该方法,将Uitextfield对象作为第一个参数。

最新更新