0

A -> B -> C の順に表示される 3 つの viewController があります。

A が B にコールする

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

C が B にコールする

[self.navigationController popViewControllerAnimated:YES];

B が、A と C のどちらが電話したかを知る方法はありますか?

ありがとう。

4

5 に答える 5

2

NavigationControllersviewControllersプロパティを使用できます。ナビゲーションスタックにあるアイテムを確認します。

ルートビューコントローラーは配列内のインデックス0にあり、バックビューコントローラーはインデックスn-2にあり、トップコントローラーはインデックスn-1にあります。ここで、nは配列内のアイテムの数です。

インデックスn-2にViewControllerが必要です。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

編集(例を追加)

NSString *previousView = NSStringFromClass([[self.navigationController.viewControllers objectAtIndex:(self.navigationController.viewControllers.count - 2)] class]);
if([previousView isEqualToString:@"SettingsViewController"]){
     // Do something
}
于 2012-10-01T13:07:32.487 に答える
1

うん。

名前の付いた@propertyタイプ(または任意のタイプ)を作成します。そして、それをプッシュするときは、そのプロパティを現在のクラスに設定するだけです。UIViewControllercomingFrom

于 2012-10-01T13:07:12.680 に答える
0

BがAから呼び出す場合、-(void)viewDidLoad {}メソッドが呼び出されます。BがCから呼び出す場合、そのメソッドは呼び出されないため、変数をグローバルに配置し、viewDidLoad()メソッドに値を割り当てることができます。そして、Cを押すときにその値を削除し、次にviewWillAppearメソッドで、それがフォームであることがわかります。

于 2012-10-01T13:26:13.417 に答える
0

ビューコントローラを再利用するときに使用する1つの方法は、クエリ可能なビューコントローラにプロパティを設定することです。ビューコントローラを割り当て/初期化し、プロパティ(NSStringまたはNSInteger)を設定して、ビューをプッシュします。このようにして、コードを使用して、ビューを作成およびプッシュしたユーザーについてそのプロパティを照会できます。

シンプルですが効果的です。

于 2012-10-01T13:07:47.867 に答える
0

はい、ClassA や ClassC などの列挙型を作成し、プッシュまたはポップ中にその列挙型に対応する値を割り当てることができます。

于 2012-10-01T13:08:40.563 に答える