iphone:关闭视图控制器和三个主要视图

Posted

技术标签:

【中文标题】iphone:关闭视图控制器和三个主要视图【英文标题】:Iphone:dismissing view controller and three main views 【发布时间】:2013-01-29 12:43:11 【问题描述】:

我有一个问题当然已经解决了,但我找不到答案。

我有一个具有三个主要视图的应用程序。就我而言,这意味着 我有主屏幕(屏幕 A),我可以转到屏幕 B 或屏幕 C。 我有(屏幕 B),我可以从中转到屏幕 A 或屏幕 C。 我有屏幕 C,我可以从中转到屏幕 A 或屏幕 B。

我没有情节提要,我正在使用 presentModalViewController。所以我每次从孩子切换到其他屏幕时都想解雇父母

例如: screen A->screen B(defore调用屏幕C屏幕A被关闭)->screen C ->screen A(屏幕A重新创建,屏幕B被删除)

我尝试在按钮方法中使用[self.presentingModalViewController dismissViewControllerAnimated]; 进行其他屏幕调用,但它会引发异常。

我能做什么?

谢谢!

【问题讨论】:

最好也提供 NSExcption 信息。 【参考方案1】:

您的应用程序导航是否基于?试试这个:

 YourABCController *controllerObj = [[YourABCController alloc] initWithNibName:@"YourABCController" bundle:nil];

UINavigationController *navcont = [[UINavigationController alloc] initWithRootViewController:controllerObj];

[self presentModalViewController:navcont animated:YES];

[commentsViewControllerObj release];

【讨论】:

【参考方案2】:

你可以将它作为一个基于 TabBar 的应用程序,具有三个视图控制器 A、B 和 C,然后你可以轻松地在视图之间切换

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UIViewController *viewControllerA = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
UIViewController *viewControllerB = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
UIViewController *viewControllerC = [[ThirdViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewControllerA, viewControllerB,viewControllerC, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;

【讨论】:

【参考方案3】:

您可以做到这一点的一种方法是使用导航控制器并推送、弹出或弹出,然后根据需要进行推送。

或者您可以使用 NSNotifications 告诉父 viewController 关闭它的子视图:

[[NSNotificationCenter defaultCenter] postNotificationName:@"switchToViewB" object:nil userInfo:nil];

和父级在收到通知时调用它的方法switchToViewB:

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

【讨论】:

【参考方案4】:

规范接下来说 -(void)dismissModalViewControllerAnimated: 方法:

If you call this method on the presented view controller itself,
however, it automatically forwards the message to the presenting view controller.
If you present several view controllers in succession, and thus build a stack of 
presented    view controllers, calling this method on a view controller lower in
the stack dismisses its immediate child view controller and all view controllers 
above that child on the stack.

因此,如果在您的示例中您关闭 ScreenA,那么 ScreenB 也将被关闭。

您可以使用 UINavigationBar、UITabBar 或一个显示视图控制器来代替这种方法

【讨论】:

以上是关于iphone:关闭视图控制器和三个主要视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 上的 3 个视图控制器之间切换

无法将新的 xib 添加到视图控制器

iPhone xcode - 从多个视图控制器控制音频的最佳方式

关闭当前视图控制器并打开新的视图控制器 - ios Swift

iphone - 在视图控制器中加载表格视图时出现问题

一次关闭多个模态视图控制器?