2016-06-29 9 views
1

Ich habe eine SuperClass die <UIWebViewDelegate> implementiert, in dieser Klasse nennen ich die Methode implementiert webView:shouldStartLoadWithRequest:navigationType:Wie Oberklasse Delegatmethode von SubClass Delegatmethode

@interface SuperClass 
... 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType { 
    // SuperClass treatment 
} 
... 
@end 

Dann habe ich eine SubClass, die diese SuperClass verlängern. die SubClass Geräte <UIWebViewDelegate> auch, und das Verfahren webView:shouldStartLoadWithRequest:navigationType: auch:

@interface SubClass: SuperClass 
... 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType { 
    // SubClass treatment 
} 
... 
@end 

Der Code funktioniert für mich, weil ich eine spezifische Behandlung für die SubClass tun müssen. Aber in einem bestimmten Fall muss ich die SuperClasswebView:shouldStartLoadWithRequest:navigationType: Methode aufrufen.

Ich brauche den Delegaten, um die SuperClassUIWebViewDelegate Methoden auszuführen.

Ich versuchte super zu verwenden, um die SuperClass Methode aufzurufen, aber ohne Einsatz!

Ist das möglich?

+0

Verwenden [self .super webView: webView shouldStartLoadWithRequest: request1 navigationType: navigationType]; –

+0

Danke @ReshmiMajumder, aber es funktioniert nicht! – raed

Antwort

4

Oberklasse

@interface ViewController() <UIWebViewDelegate> 
@end 

@implementation ViewController 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType 
{  
    NSLog(@"superview"); 
    return true;  
} 

Subklasse (ViewController1.m)

@interface ViewController1() <UIWebViewDelegate> 

@property (strong, nonatomic) IBOutlet UIWebView *webview; 

@end 

@implementation ViewController1 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request1 navigationType:(UIWebViewNavigationType)navigationType { 

    NSLog(@"subclass"); 
    [super webView:webView shouldStartLoadWithRequest:request1 navigationType:navigationType]; 
    return true; 

} 

- (IBAction)action:(id)sender { 

    NSLog(@"loading"); 
    [_webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.co.in"]]]; 

} 

in den Protokollen kommt es als:

2016-06-29 17: 51: 39,807 Test [31575: 8224563] wird geladen

2016-06-29 17: 51: 41,008 Test-[31575: 8224563] Unterklasse

2016-06-29 17: 51: 41,008 Test-[31575: 8224563] Super

+0

Muss ich die Methodendeklaration in 'SuperClass.h' setzen? Weil ich den Fehler habe 'No visible @interface für' SuperClass 'deklariert den Selektor' webView: shouldStartLoadWithRequest: navigationType: '' – raed

+0

nein, bitte überprüfe meine bearbeitete Antwort. –

+0

Ich schätze Ihre Hilfe, aber ich bekomme immer noch den gleichen Fehler, könnten Sie das Projekt mit mir teilen? – raed

0
@interface SuperClass 
- (void)handleWebViewShouldStartLoadWithRequest:(NSURLRequest *)request; 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    [self handleWebViewShouldStartLoadWithRequest:request]; 
} 

@end 

Im handleWebViewShouldStartLoadWithRequest: der Unterklasse, können Sie [super handleWebViewShouldStartLoadWithRequest:request] nennen;

+0

Danke, ich dachte über diese Lösung nach, aber gibt es eine Möglichkeit, dass der Delegat SuperClass UIWebViewDelegate-Methoden aufrufen. – raed

+0

Kurz gesagt, denke ich nein. – Proton