如何关闭另一个 ViewController 中的 viewcontroller?
How to dismiss a viewcontroller within another ViewController?
假设我有一个名为 A,B,C,D,E我用presentModel方式依次打开这些ViewConrollers
。当我在 ViewController
E 时,我想以 presentModel 方式打开另一个 ViewController
F 。在 F ViewController
我有一个后退按钮。当我点击它时,它应该关闭 F 并显示 A ViewController
。但是现在当它关闭时显示 E。当我单击 F
的后退按钮时,如何关闭除 A 之外的所有其他视图控制器
请帮助我。谢谢
已更新
-(IBAction)dismisthis:(id)sender{
UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil && [dismissingViewController isKindOfClass:[FrontViewController class]]) {
dismissingViewController = self.presentingViewController;
}
[dismissingViewController dismissViewControllerAnimated:NO completion:NULL];
如果您关闭一个正在呈现另一个视图控制器的视图控制器,则整个层次结构将被关闭。有多少级别并不重要。所以你所要做的就是找到你的视图控制器 A
并告诉它关闭它呈现的视图控制器。
如果A
总是堆底,可以用一个简单的循环来找到它:
UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil) {
dismissingViewController = self.presentingViewController;
}
[dismissingViewController dismissViewControllerAnimated:YES
completion:NULL];
此时我可以想到三个解决方案
您应该在 Appdelegate 中跟踪堆栈对象(这是一个数组)中的所有 viewController。当您希望它访问时,获取这些数组并关闭所有视图控制器对象。
每个 viewcontroller 你都可以观察一个 NSNotification 来监听通知。当您在 "F" 中需要它时,只需 post 通知,此通知将关闭 eviewcontrollers
转到 NavigationController 以便您可以推送到 rootviewcontroller
使用 NSNotificationCenter
从 F 发送 Notification
怎么样,A 会收听。一旦 A 收到通知,它将调用 dismissViewController
,我认为这将全部关闭。
试试这个:
UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootVC dismissViewControllerAnimated:YES completion:nil];
// One-liner
// [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
将 A 设为 rootViewController 并在 "F" 的后退按钮上使用以下代码:
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissViewControllerAnimated:true completion:nil];
假设我有一个名为 A,B,C,D,E我用presentModel方式依次打开这些ViewConrollers
。当我在 ViewController
E 时,我想以 presentModel 方式打开另一个 ViewController
F 。在 F ViewController
我有一个后退按钮。当我点击它时,它应该关闭 F 并显示 A ViewController
。但是现在当它关闭时显示 E。当我单击 F
请帮助我。谢谢
已更新
-(IBAction)dismisthis:(id)sender{
UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil && [dismissingViewController isKindOfClass:[FrontViewController class]]) {
dismissingViewController = self.presentingViewController;
}
[dismissingViewController dismissViewControllerAnimated:NO completion:NULL];
如果您关闭一个正在呈现另一个视图控制器的视图控制器,则整个层次结构将被关闭。有多少级别并不重要。所以你所要做的就是找到你的视图控制器 A
并告诉它关闭它呈现的视图控制器。
如果A
总是堆底,可以用一个简单的循环来找到它:
UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil) {
dismissingViewController = self.presentingViewController;
}
[dismissingViewController dismissViewControllerAnimated:YES
completion:NULL];
此时我可以想到三个解决方案
您应该在 Appdelegate 中跟踪堆栈对象(这是一个数组)中的所有 viewController。当您希望它访问时,获取这些数组并关闭所有视图控制器对象。
每个 viewcontroller 你都可以观察一个 NSNotification 来监听通知。当您在 "F" 中需要它时,只需 post 通知,此通知将关闭 eviewcontrollers
转到 NavigationController 以便您可以推送到 rootviewcontroller
使用 NSNotificationCenter
从 F 发送 Notification
怎么样,A 会收听。一旦 A 收到通知,它将调用 dismissViewController
,我认为这将全部关闭。
试试这个:
UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootVC dismissViewControllerAnimated:YES completion:nil];
// One-liner
// [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
将 A 设为 rootViewController 并在 "F" 的后退按钮上使用以下代码:
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissViewControllerAnimated:true completion:nil];