Scénario: Nécessité d'exécuter le délégué CustomWebview sur le contrôleur de vue.Comment utiliser le protocole au lieu de déléguer dans l'iPhone
S'il vous plaît aidez-moi avec ce code. Au lieu d'utiliser le rappel, j'ai besoin d'utiliser "Protocole". Peut-il être fait ou nous pouvons seulement utiliser le rappel dans ce scénario.
Sur ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
//MyWebView *webView = [[MyWebView alloc] initWithDelegate:self callback:@selector(finishLoading)];
MyWebView *webView= [[MyWebView alloc] initWithFrame:CGRectMake(0,0,320, 460)];
[webView LoadURL:@"http://192.168.5.165/"];
[webView setDelegate:self];
[webView setCallback:@selector(finishLoading)];
[self.view addSubview:webView] ;
}
- (void) finishLoading
{
NSLog(@"Finish");
}
Sur MyWebView.h
@interface MyWebView : UIView<UIWebViewDelegate> {
NSString *strURL;
}
@property(nonatomic, retain) NSString *strURL;
@property (nonatomic, assign) id delegate;
@property (nonatomic, assign) SEL callback;
-(void) LoadURL:(NSString*)url;
@end
Sur MyWebView.m
#import "MyWebView.h"
@implementation MyWebView
@synthesize strURL,delegate,callback;
UIWebView *webView;
-(id) initWithFrame:(CGRect)frame
{
if(self =[super initWithFrame:frame])
{
webView = [[UIWebView alloc] initWithFrame:frame];
webView.delegate = self;
[self addSubview:webView];
}
return self;
}
-(void) LoadURL:(NSString*)url
{
NSURL *u = [NSURL URLWithString:url];
NSURLRequest *req= [NSURLRequest requestWithURL:u];
[webView loadRequest:req];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[delegate performSelector:callback];
}
Je sais que le code ci-dessus peut avoir le protocole, dans ce cas, je don Pas besoin d'utiliser CALLBACK. juste ne sais pas comment mettre en œuvre le protocole. Pouvez-vous s'il vous plaît aider à changer le code en utilisant le protocole au lieu de CALLBACK. – iPhoneDev
Voulez-vous dire que vous voulez que votre propre classe ait un protocole de délégué (distinct de 'UIWebViewDelegate')?Si oui, définissez le protocole (comme indiqué ci-dessus), changez le type de propriété de votre délégué de 'id' à' id ', et utilisez soit [[self.delegate performSelector: @selector (theDelegateMethod :) withObject: self]' ou 'objc_msgSend (self.delegate, @selector (theDelegateMethod :), self)' pour envoyer le message au délégué. (Si le protocole définit la méthode comme facultative, assurez-vous de vérifier que vous pouvez l'appeler avec [self.delegate respondsToSelector: @selector (theDelegateMethod :)] 'en premier!) –
Dans MyWebView.h @protocol webProtocol - (vide) loadWeb; @end @property (non atomique, affectez) id délégué ;. Maintenant, comment puis-je l'implémenter dans "ViewControler.m" –
iPhoneDev