我正在尝试覆盖我的应用程序的openURL方法来拦截UITextView中的链接点击。 UITextView位于基于导航的DetailViewController中,当用户单击链接时,我想将Web视图推送到导航堆栈。
我验证了通过将截获的URL记录到控制台来调用我的方法,但导航控制器根本没有推送我的WebViewController。我在界面构建器中创建了一个按钮,并使用textview将其添加到同一视图中,以验证WebView是否被推送。该按钮仅用于测试目的。
问题似乎是当我从AppDelegate调用该方法时,导航控制器pushViewController代码没有被触发,即使NSLog显示我得到了有效拦截的URL。
感谢您提供的任何帮助!代码:
内部AppDelegate.m:
- (BOOL)openURL:(NSURL *)url
{
DetailViewController *webView = [[DetailViewController alloc]init];
webView.url = url;
[webView push];
return YES;
}
DetailViewController.h:
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController <UIGestureRecognizerDelegate>
@property (nonatomic, strong) NSURL *url;
- (void)push;
@end
DetailViewController.m:
- (void)push
{
WebViewController *webView = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];
webView.url = self.url;
NSLog(@"%@",self.url);
[self.navigationController pushViewController:webView animated:YES];
}
答案 0 :(得分:4)
我通过使用NSNotification解决了这个问题。其他人发现此代码如下:
AppDelegate.m:
- (BOOL)openURL:(NSURL *)url
{
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"WebViewNotification" object:url]];
return YES;
}
DetailViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(webViewNotification:) name:@"WebViewNotification" object:nil];
}
- (void)webViewNotification:(NSNotification *)notification
{
NSURL *url = [notification object];
WebViewController *webView = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];
webView.url = url;
[self.navigationController pushViewController:webView animated:YES];
}