0

我仍然无法完全理解这些委托方法是如何被调用的。我有一个类UIViewControllerUITextFieldDelegate它将调用其委托方法而不指定类似textField.delegate = self;

但是对于一些不同的目的,比如UIWebViewDelegate我们应该输入 like webView.delegate = self;,它似乎正在调用它的委托方法。完美的。

但现在我面临一个问题。我正在使用CLLocationManagerDelegate并且也在CALayer同一个班级。对于我给予的两者,location.delegate =self;并且layer.delegate =self;在某些时候两者都相互冲突,并且只有其中一个在工作,要么CLLocationManagerDelegate要么CALayer。另一件事是停止。我不明白为什么会这样?任何原因?我们怎样才能克服这一点。甚至我计划使用其他一些框架,比如UIWebView. 对于那些委托方法,我也会面临同样的问题。你能告诉我为什么它以这种方式工作吗?

4

1 回答 1

2

无需您指定即可调用其委托的类具有默认实现,这意味着它们已经知道要做什么,并且只有在您覆盖这些方法时才会改变它们的行为。

为同一个委托设置 2 个或多个类不应相互干扰(除非出于非常奇怪的原因,在两个自定义类中方法的名称相同)。

您的问题很可能是您没有实现这些方法或错误地使用了这些类。

例如,位置管理器要求您创建一个实例,对其进行配置并开始运行更新。这种类型的委托最常用的方法是“更新位置”(或类似的东西)。如果您想在每次收到新位置时都得到通知,则必须执行此操作。否则,您必须随时手动读取位置。

作为建议,每次为对象设置委托时,都必须执行 object.delegate = self; 事物。您可能注意到,在您在标头中指定它符合该协议之前,您会收到警告:例如。

只需控制单击 UITextFieldDelegate 字样。

在@required 下寻找那些你必须始终实现的方法。@optional 具有默认实现,因此除非您想更改行为,否则不需要实现它们。

于 2012-05-14T07:15:15.863 回答