0

NIB ファイルをいつ使用し、いつコードを使用するべきかについて、少し混乱しています。ここに私の問題があります:

RootController とその NIB ファイルを使用するナビゲーション ベースのアプリケーションがあります。RootController の NIB ファイルには、TableView が含まれています。セルをクリックすると、コンテンツをロードするリクエストで新しい接続を初期化します。接続の読み込みが完了したら、NIB ファイルから新しい postViewController (カスタム) を作成し、それを次のように navigationController viewController スタックにプッシュします。

PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]]; 

[postViewController.webView setDelegate:self];

postViewController.postContent = [[postsData objectForKey:@"post"] objectForKey:@"content"];

[self.navigationController pushViewController:postViewController animated:YES];

[PostViewController release];

次に、ご覧のとおり、rootViewController を webView のデリゲートとして設定して、リンクのクリックをインターセプトし、新しい ViewController をスタックにプッシュできるようにします。戻るボタン付きのナビゲーション バーを表示するには、その新しいビューが必要です。

問題 : webView:shouldStartLoadWithRequest:navigationType が呼び出されないため、setDelegate が機能していないようです。

NIB ファイルにデリゲートを設定する必要があると思いますが、方法がわかりません。PostViewController の NIB ファイルは、RootViewController について認識していません...

NIB ファイルのスクリーンショットは次のとおりです。

RootViewController.xib

PostViewController.xib (ファイルの所有者)

PostViewController.xib (Web ビュー)

詳細が必要な場合は、私に尋ねてください。

どうもありがとう...別の日のために頭をぶつけないように助けてくれて:)

4

2 に答える 2

3

postViewController.webView呼び出すときは nil でないことを確認しsetDelegate:てください。また、他の場所で呼び出されていないことを確認し、デリゲート アウトレットが NIB のどこにも接続されていないことを確認してください。

その他のコメント:

  1. このような場合に、ルート ビュー コントローラーを Web ビューのデリゲートとして使用するのは少し珍しいことです。動作するはずですが、これらのデリゲート メソッドを PostViewController に移動する方が理にかなっています。そこから、リンクのクリックを傍受して[self.navigationController pushViewController:animated:].

  2. [PostViewController release]クラスオブジェクトを解放しています。良い考えではありません。代わりに、 を呼び出す必要があります[postViewController release]

于 2011-04-08T15:43:45.913 に答える
1

[postViewController.webView setDelegate:self];現在の Controller のデリゲートを not に設定しますpostViewController。試す:

[postViewController.webView setDelegate:postViewController];

そして、この行を下pushViewController:animated:に置くと、webView が既に存在しているはずです。

于 2011-04-08T15:45:11.147 に答える