Я пытаюсь создать пользовательский элемент управления на основе 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;
}
К сожалению, mustStartLoadWithRequest никогда не вызывается, поэтому щелчки не запускаются извне.