UIAlertViewDelegate扩展协议
我想用一个可选的委托方法扩展UIAlertViewDelegate协议。UIAlertViewDelegate扩展协议
接口
@protocol HPAlertViewDelegate;
@interface HPAlertView : UIAlertView<UIWebViewDelegate>{
id <HPAlertViewDelegate> delegate;
UIWebView *webView;
}
@property (nonatomic, assign) id <HPAlertViewDelegate> delegate;
@property (nonatomic, retain) UIWebView *webView;
- (id)initWithWebURL:(NSString *)url title:(NSString *)aTitle;
@end
@protocol HPAlertViewDelegate <UIAlertViewDelegate>
@optional
- (void)HPAlertViewWebViewDidLoad:(HPAlertView *)alertView;
@end
实施
@dynamic delegate
当我使用它在myViewController像:
HPAlertView *alertView = [[HPAlertView alloc] initWithWebURL:myURL tile:myTitle];
[alertView setDelegate:self];
我有2个问题:
如果我委托设为@dynamic,我在HPAlertView委托总是空,即使setDelegate:自
如果我委托设为@synthesize,我代表响应仅适用于新的@optional委托方法,而不适用于UIAlertView委托方法。
尝试@synthesize
,然后实现setter方法,因为这:
- (void)setDelegate:(id)aDelegate {
super.delegate = aDelegate;
delegate = aDelegate;
}
我猜@synthesize
你们班会生成一个名为delegate
是从超类delegate
实例变量不同的一个新的实例变量。你可以在这里阅读更多关于这个:http://cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html
谢谢,但没有,如果我这样做,我会在setDelegate上产生无限循环(self.delegate = [self setDelegate],所以....) –
是的,我刚刚注意到并更改了代码 –
它工作吗?只是好奇:) –
我知道这不是你要求的,但你不应该真的继承'UIAlertView'。 – hypercrypt