【发布时间】:2010-02-07 03:19:51
【问题描述】:
我正在尝试基于 UIWebView 构建自定义控件并将其编译到库中以供重用。当我将代码全部放在一个测试应用程序中时,一切都运行良好,但是我在为库的视图设置委托时遇到了一些麻烦。值得注意的是,示例应用使用了界面生成器,因此委托是通过 IB 设置的。
NewsView.h:
@interface NewsView : UIWebView {
NSObject<UIWebViewDelegate> *delegate;
}
@property (nonatomic, assign) IBOutlet NSObject<UIWebViewDelegate> *delegate;
在实现中我所有的初始化方法都调用了一个通用方法viewInit
NewsView.m
@implementation NewsView
@synthesize delegate;
- (void)viewInit {
self.delegate = [[NewsViewDelegate alloc] init];
}
如果用户点击视图中的某个标题,我需要委托拦截点击并启动 Safari。
NewsViewDelegate.h
@interface NewsViewDelegate : NSObject <UIWebViewDelegate> {
}
NewsViewDelegate.m
// Intercept URL events
- (BOOL)webView:(UIWebView *)myWebView shouldStartLoadWithRequest:
(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"URL Changed");
// Check to see if this is a click event
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[request URL] absoluteString]]];
return NO;
}
return YES;
}
不幸的是 shouldStartLoadWithRequest 永远不会被调用,因此点击不会从外部启动。
【问题讨论】:
标签: iphone objective-c uiwebview static-libraries