我仍然无法完全理解这些委托方法是如何被调用的。
我在一个类中有UIViewController
,UITextFieldDelegate
,它将调用其委托方法,而不指定类似 textField.delegate = self;
但是对于某些不同的目的,例如UIWebViewDelegate
,我们应该像 webView.delegate = self;
一样进入,似乎它正在调用它的委托方法。完美。
但现在我遇到了一个问题。我在同一个班级中使用CLLocationManagerDelegate
和CALayer
。对于我同时给予location.delegate =self;
和layer.delegate =self;
的情况,两者之间互相冲突,只有一件事情是 CLLocationManagerDelegate
或 { {1}} 即可。另一件事就是停止了。我不知道为什么会这样发生?任何原因?我们怎样才能克服这一点。即使我打算使用其他一些框架工作,比如 CALayer
。对于那些委托方法,我也将面临同样的问题。你能告诉我为什么它以这种方式运作吗?
答案 0 :(得分:2)
在没有指定它们的情况下调用其委托的类具有默认实现,这意味着它们已经知道该做什么,并且只有在重写这些方法时才会改变它们的行为。
将2个或更多个类设置为同一个委托不应相互干扰(除非出于非常奇怪的原因,在两个自定义类中该方法的命名方式相同)。
您的问题很可能是您没有实现这些方法或使用这些类错误的事实。
例如,位置管理器要求您创建实例,配置它并开始运行更新。这种类型的委托最常用的方法是“确实更新位置”(或类似的东西)。如果您希望每次收到新位置时都要通知您必须执行的操作。否则,您必须随时手动阅读该位置。
作为建议,每次为对象设置委托时,都必须执行object.delegate = self;事情。您可能已经注意到,在标题中指定它符合该协议之前,您将收到警告:例如。
只需控制点击UITextFieldDelegate字。
查找@required下的方法,你必须始终实现。 @optional有默认实现,所以除非你想改变它不需要实现它们的行为。