0

質問はタイトルにあります。ユーザーが現在見ている全画面表示を示すために「topViewController」と書きました。アプリが 0、1、または複数のナビゲーション コントローラーを使用しているかどうかに関係なく、アプリ デリゲートからこれを行う一般的な方法を探しています。

現在のアプリでこれを解決できますが、特殊なケースのコードを使用します。App Delegate に共通のメソッドを配置して、コールバックをトリガーしたい場合があります。RespondsToSelector を使用することもできますが、個別に名前が付けられたコールバック メソッドのルックアップが (私にとっては) 見苦しくなります。

これは私にとって単純に興味深い質問であり (実行中のアプリは確実に知っている必要があります!)、一般的な解決策が武器庫にあると便利です。

4

1 に答える 1

0

メソッドを呼び出すトップ ビュー コントローラーを含む App Delegate 内のナビゲーション コントローラーへの参照はありますか? その場合、UINavigationController には というメンバーがありtopViewControllerます。それをカスタムView Controllerクラスにキャストできます:

CustomViewController *customController = (CustomViewController *)[aNavController topViewController];
[customController myCustomMethod];

前述したように、アプリ デリゲートにナビゲーション コントローラーへの参照がある場合、このメソッドは機能します。

そうでない場合は、別のアプローチとして NSNotificationCenter を使用できます。「topViewController」でカスタム通知名を登録し、App Delegate からその通知を投稿します。各ビュー コントローラーが表示されたときに通知を受け取るように登録し、表示されなくなったときに登録を解除すると、表示されているビュー コントローラーだけが通知を受け取ります。

あなたの場合、おそらく登録してくださいviewDidAppear:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myCustomMethod:) name:@"MyCustomNotification" object:nil];

App Delegate からの通知を投稿します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyCustomNotification" object:myAccount];

オブザーバーを削除することを忘れないでくださいviewDidDisappear:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyCustomNotification" object:nil];
于 2013-04-09T17:25:43.687 に答える