1

シンプルなタブバーのiPhoneアプリを作っています。これには 2 つのタブがあり、1 つには UIWebView があり、もう 1 つには設定を保持するためのいくつかのテキスト フィールドと、設定を保存するためのボタンがあります。

私がやりたいことは、ユーザーが設定タブ/ビューで保存をクリックしたときに UIWebView をリロードすることです。私はすでに設定を保存しています。UIWebView 自体を更新するための呼び出しを行う方法を理解する必要があります。

ビューが別のビューにメッセージを送信する方法について混乱しています。

4

5 に答える 5

5

UITabBarController のフレームワーク内でこれら 2 つのビューを使用しているという事実は、問題の核心とは無関係です。つまり、アプリケーションの一部に、別の部分で何かが発生したことを伝えたいということです。これを行う典型的な方法は、KVO を使用するか、次のように NSNotificationCenter を使用することです。

// Register interest in finding out when the settings are changed
[[NSNotificationCenter defaultCenter] addObserver:myWebViewController 
    selector:@selector(refreshWebView:) name:@"settingsSaved" object:nil];

// Notify interested parties that the settings have changed
[[NSNotificationCenter defaultCenter] postNotificationName:@"settingsSaved" object:nil];
于 2009-05-06T06:19:20.407 に答える
4

私がやったことは、AppDelegate を介してお互いに話させることです。

例えば:

View1 には次の機能があります。

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [appDelegate myFunction];

MyAppDelegate には myFunction という関数があり、何かを実行するか、次を呼び出します。

[viewController myViewFunction];

複数のビューをロードする (そして、あたかも別の画面であるかのように前後にナビゲートする) ための非常に優れたシステムをセットアップしました。これを書き上げて pushplay.net に投稿する時間がなかったのですが、数日中に投稿しようと思います...

===

編集:さて、私は私が持っているものを投稿しました。コメントをいただければ幸いです。

http://pushplay.net/blog_detail.php?id=27

以下のコメンターが言っていることは理解できますが、複数のビューコントローラーを相互にナビゲートする必要があることに基づいて、シームレスに機能する例をまだ見ていません.

于 2009-05-05T23:04:28.440 に答える
1

この場合、アプリのデリゲートで、Web ビューを保持するコントローラーを、アプリケーションの起動時に他のビュー コントローラーのデリゲートとして割り当てた方がよいでしょう。プロトコルを使用してクリーンにすることを検討してください。デリゲート型をビュー コントローラーを保持する Web ビューとして宣言します。

通知も良いアイデアであり、タスクが小さすぎるということはありませんが、dealloc などの場所で通知の購読を解除することが重要であることを認識しておく必要があります。ただし、実際には問題にならないタブ バー ビュー コントローラーのトップ レベルの場合。

于 2009-05-06T06:51:06.713 に答える
1

これは、特定のアプリケーションの複雑さと、そのアプリケーションのオブジェクト モデルによって異なります。

  • ビューが関連しており、メッセージがビューのみに関連している場合、それらは互いにメッセージを直接送信できます。たとえば、ビューはそのサブビューに直接メッセージを送信できます (またそうすべきです)。また、ビューは親に直接メッセージを送信できます。

  • それらのビューが関連していないが、同じ情報に関するデータを表示する場合は、viewController を介してメッセージをプロキシする必要があります。これがまさに、View Controller がある理由です。

  • 強力な MVC アーキテクチャを備えた複雑なアプリケーションを使用している場合、モデル オブジェクトを更新し、viewController を介してこれをビューにカスケードすることにより、間接的に通信を行う必要があります。

于 2009-05-06T06:20:42.497 に答える
0

タブ ビュー コントローラーで、Web ビューを指すインスタンス変数をいつでも設定できます。IBOutlet として設定し、Interface Builder に接続してから、インスタンス変数でメソッドを呼び出すだけです。

.h ファイル:

IBOutlet UIWebView *webView;

@property (nonatomic, retain) UIWebView *webView;

.m ファイル:

@synthesize webView;

//Then later in your method
[webView refresh]; //or however you do it

よろしく、

カイル

于 2009-05-07T04:45:06.990 に答える