0

Fooを継承しUIViewControllerて実装するクラスがありUIWebViewDelegateます。新しいクラスから継承しFoo、古いwebViewDidFinishLoadメソッドを拡張できますか?webViewDidFinishLoadコードを実行してから、スーパークラスからを呼び出す必要があります。

4

3 に答える 3

4

答えはイエスです-私はこれをいくつかの場所で自分で行います。したがって、Fooはプロトコルを実装し、これはインターフェイスファイルに記述されています。次に、Fooのサブクラスである新しいクラスGooを作成できます。Fooはプロトコルを実装すると公に述べているので、Gooもそれを実装していると宣言されます。

そのプロトコルに必須メソッドがある場合、コンパイラーはFooがそれらを実装していると想定するため、Gooの一部またはすべてのメソッドをオーバーライドできます。(私と同じように)「[supersomeMethod]」を呼び出して、必要に応じてFooにもアクションを実行させることができます。

于 2012-10-02T11:28:58.453 に答える
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
}
于 2012-10-02T11:30:27.093 に答える
0

webViewDidFinishLoadはデリゲートです。次のようにして、別のクラスを拡張できます。

Foo : anotherClass

しかし、デリゲートは内で呼び出されます

<UIWebViewDelegate>

お役に立てれば。

于 2012-10-02T11:21:40.493 に答える