0

これに関するいくつかの質問を見てきましたが、この問題を解決するのに役立つものはありませんでした。

私は MasterViewController -> AViewController -> BViewController を持っています

ドキュメントには次のように記載されています。

表示側のビュー コントローラーは、表示されたビュー コントローラーを閉じる役割を果たします。ただし、提示されたView Controller自体でこのメソッドを呼び出すと、メッセージが提示元のView Controllerに自動的に転送されます。

[self.presentingViewController dismissModalViewControllerAnimated: YES];

B VC からこのメソッドを呼び出すと、A VC と B VC が破棄されます。それでも、それは子供を解雇するだけです(B VC)。なんで?

- (IBAction)checkButton:(UIButton *)sender {

    NSManagedObjectContext * context = [myAppDelegate managedObjectContext];
    Work * newWork = [NSEntityDescription insertNewObjectForEntityForName:@"Work" inManagedObjectContext:context];
    [newWork setName:_workName];
    [myAppDelegate saveContext];

    NSLog(@"%@", [self.presentingViewController description]);
    [self.presentingViewController dismissModalViewControllerAnimated: YES];

}

関連性があるかどうかはわかりませんが、A と B の VC は次のように提示されています。

    TWWorkNameViewController *controller = (TWWorkNameViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WorkName"];
    [self presentViewController:controller animated:YES completion:nil];
4

3 に答える 3

2

これは、MasterViewController が AViewController を提示しており、これが BViewController を提示しているためです。これはスタックの一番上にあるため、BViewController を閉じています。BViewController から MasterViewController に戻りたい場合は、Navigtioncontroller を使用してメソッドを使用できます。

popToRootViewControllerAnimated: "ルート ビュー コントローラーを除くスタック上のすべてのビュー コントローラーをポップし、表示を更新します。" http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

ナビゲーション コントローラーを使用したくない場合は、通知を使用する必要があります。

- (void)viewDidLoad
{
[super viewDidLoad];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(dismiss) name:@"BACKTOINDEXNOTE" object:nil];
}

-(void)dismiss
{
  [self dismissViewControllerAnimated:YES completion:nil];
}

メソッド内の BViewController と言うだけです

- (IBAction)checkButton:(UIButton *)sender {
 NSNotification * notification = [NSNotification notificationWithName:@"BACKTOINDEXNOTE" object:nil];
 [[NSNotificationCenter defaultCenter] postNotification:notification];
}

これで、BViewController と AViewController を破棄します。

于 2013-07-19T00:31:09.530 に答える
0

私が理解しているように、「ただし、提示されたView Controller自体でこのメソッドを呼び出すと、提示しているView Controllerにメッセージが自動的に転送されます。」提示されたView Controller自体がView Controllerを提示していない場合を指しています。通常、表示側のビュー コントローラーは、表示されたビュー コントローラーを閉じる責任がdismissModalViewControllerAnimatedありますが、何も表示していないビュー コントローラーを呼び出す場合は、何もしないか、それ自体を閉じるかの 2 つのオプションがあります。そのメッセージを表示しているView Controllerに転送することで、それ自体を却下することは理にかなっています。電話すればdismissModalViewControllerAnimatedドキュメントにあるように、別のView Controllerを提示しているView Controllerでは、そのView Controllerを閉じて、提示しているView Controller(存在する場合)にメッセージを転送しないでください。

于 2013-07-19T00:15:22.960 に答える
-1

これが正しい答えかどうかはわかりませんが、A->B->C があり、C を使用していて A に戻りたい場合、つまり C と B を同時に却下する場合は、 B の presentingViewController です。iOS 8 でこれをテストしました。B と C の両方が 1 つのアニメーションで同時に閉じられます。

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
于 2015-04-16T00:57:06.370 に答える