在目标c中扩展协议实现

时间:2012-10-02 11:13:54

标签: objective-c ios

我的班级Foo继承自UIViewController并实施了UIWebViewDelegate。 我可以在新类中继承Foo并扩展旧的webViewDidFinishLoad方法吗? 我需要执行一些代码,然后从超类中调用webViewDidFinishLoad

3 个答案:

答案 0 :(得分:4)

答案是肯定的 - 我自己在几个地方这样做。所以Foo实现了一个协议,这在接口文件中有说明。然后,您可以拥有一个新类Goo,它是Foo的子类。由于Foo公开表示它实现了一个协议,因此Goo也将被宣布为实现它。

如果该协议具有强制方法,则编译器将假定Foo实现它们,因此您可以覆盖Goo中的任何或所有方法。你可以(像我一样)也叫'[super someMethod]'让Foo也可以采取行动。

答案 1 :(得分:0)

webViewDidFinishLoad是一个委托,您可以通过以下方式扩展另一个类:

Foo : anotherClass

但是在

中调用了委托
<UIWebViewDelegate>

希望这会有所帮助。

答案 2 :(得分:0)

您可以在实施协议后覆盖该方法,并更改或扩展此行为:

foo.h中


Foo : UIViewController {}
- (void)customWebViewDidFinishLoad:(UIWebView *)webView;

Foo.m


- (void)webViewDidFinishLoad:(UIWebView *)theWebView {
    [self customWebViewDidFinishLoad:self.webView];
}

// Override this method in Bar.m
- (void)customWebViewDidFinishLoad:(UIWebView *)webView {
    // Default behaviour
}

Bar.h


Bar : Foo  

Bar.m


- (void)customWebViewDidFinishLoad:(UIWebView *)webView {
  [super customWebViewDidFinishLoad:webView];
  //Extend the behaviour here
}