Сценарий: необходимо выполнить делегат CustomWebview на контроллере представления.Как использовать протокол вместо делегирования в iPhone
Пожалуйста, помогите мне с этим кодом. Вместо использования обратного вызова мне нужно использовать «Протокол». Это можно сделать или мы можем использовать только обратный вызов в этом сценарии.
На 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");
}
На 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
На 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];
}
Я знаю, что приведенный выше код может иметь протокол, в этом случае я не Не нужно использовать CALLBACK. просто не знаю, как реализовать протокол. Не могли бы вы помочь изменить код, используя протокол вместо CALLBACK. – iPhoneDev
Вы хотите, чтобы ваш собственный класс имел протокол делегата (отдельно от 'UIWebViewDelegate')?Если это так, определите протокол (как показано выше), измените тип свойства делегата с 'id' на' id 'и используйте либо' [self.delegate performSelector: @selector (theDelegateMethod :) withObject: self] ' или 'objc_msgSend (self.delegate, @selector (theDelegateMethod :), self)' для отправки сообщения делегату. (Если протокол определяет метод как необязательный, убедитесь, что вы можете его вызвать с помощью '[self.delegate replysToSelector: @selector (theDelegateMethod :))' first!) –
В MyWebView.h @protocol webProtocol - (void) loadWeb; @end @property (nonatomic, assign) id делегат ;. Теперь, как это реализовать в «ViewControler.m» –
iPhoneDev