gpt4 book ai didi

iphone - UIAlertViewDelegate 扩展协议(protocol)

转载 作者:行者123 更新时间:2023-12-03 21:18:27 26 4
gpt4 key购买 nike

我正在尝试使用一种可选的委托(delegate)方法来扩展 UIAlertViewDelegate 协议(protocol)。

界面

@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 个问题:

  • 如果我将 delegate 设置为 @dynamic,即使使用 setDelegate:self,HPAlertView 中的 delegate 也始终为 null

  • 如果我将委托(delegate)设置为 @synthesize,我的委托(delegate)将仅响应新的 @Optional 委托(delegate)方法,而不响应 UIAlertView 委托(delegate)方法。

最佳答案

尝试@synthesize,然后按如下方式实现 setter :

- (void)setDelegate:(id)aDelegate {
super.delegate = aDelegate;
delegate = aDelegate;
}

我猜你的类中的@synthesize会生成一个名为delegate的新实例变量,它与父类(super class)delegate实例变量不同。您可以在这里阅读更多相关信息:http://cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html

关于iphone - UIAlertViewDelegate 扩展协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com