アプリケーションの openURL メソッドをオーバーライドして、UITextView でリンクのクリックをインターセプトしようとしています。UITextView はナビゲーション ベースの DetailViewController にあり、ユーザーがリンクをクリックすると、Web ビューをナビゲーション スタックにプッシュしたいと考えています。
インターセプトされた URL をコンソールに記録してメソッドが呼び出されていることを確認しましたが、ナビゲーション コントローラーは WebViewController をまったくプッシュしていません。インターフェイスビルダーでボタンを作成し、テキストビューと同じビューに追加して、WebView がプッシュされることを確認しました。ボタンはテスト目的でのみ使用されました。
問題は、有効なインターセプトされた URL を取得していることを NSLog が示しているにもかかわらず、AppDelegate からメソッドを呼び出したときに、navigationController pushViewController コードが起動されないようです。
提供されたヘルプに感謝します!コード:
AppDelegate.m の内部:
- (BOOL)openURL:(NSURL *)url
{
DetailViewController *webView = [[DetailViewController alloc]init];
webView.url = url;
[webView push];
return YES;
}
詳細ViewController.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];
}