2012-10-02 46 views
0

我有一個類Foo,它繼承自UIViewController並實現了UIWebViewDelegate。 我可以從Foo繼承一個新類,並擴展舊的webViewDidFinishLoad方法嗎? 我需要執行一些代碼,然後從超類調用webViewDidFinishLoad在目標c中擴展協議實現

回答

4

答案是肯定的 - 我在幾個地方自己做這個。所以Foo實現了一個協議,這在接口文件中有說明。然後你可以有一個新的類,Goo,它是Foo的一個子類。由於Foo公開聲明它實現了一個協議,因此Goo也將被宣佈爲實現它。

如果該協議具有強制方法,那麼編譯器會假定Foo實現它們,因此您可以覆蓋Goo中的任何或所有方法。你可以(像我一樣)也調用'[super someMethod]'讓Foo也可以採取行動。

0

webViewDidFinishLoad是一個代表,你可以通過做擴展另一個類:

Foo : anotherClass 

,但委託的

<UIWebViewDelegate> 

希望這有助於中調用。

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 
}