2

アプリケーションの 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];
}
4

1 に答える 1

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];
}
于 2013-06-28T02:41:21.130 に答える