【发布时间】:2012-03-08 06:16:31
【问题描述】:
我在关闭 UIViewController 对象集合时遇到了一些问题。我不知道有一种优雅的方法可以一次关闭所有加载的模式 UIViewController 对象。
我使用 Xcode 4 中的“故事板”,但我不使用 Segues 来映射屏幕。我使用动态代码,如下所示:
一切从 MainViewController.m 开始。我加载 [myMenuController] (菜单列表)。当用户从菜单中选择一个选项时,它会加载 [myTicketController]。在那里进行一些用户交互后,它会加载 [myNextController] 并且您会看到该模式。我动态加载了几个 UIViewControllers(这里没有 segues):
//from MainViewController.m - Load the main menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myMenuController = (MyMenuController *)[storyboard instantiateViewControllerWithIdentifier:@"MyMenuController"];
myMenuController.settingsModel = settingsModel;
myMenuController.ticketStatusHandler = data;
myMenuController.rootDataModel = dataModel;
[myMenuController setModalPresentationStyle:UIModalPresentationFullScreen];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myMenuController animated:YES];
///////////////////////////////////////////////////////////////////////////
//from MyMenuController.m - Load the add ticket menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myTicketController = (MyTicketController *)[storyboard instantiateViewControllerWithIdentifier:@"MyTicketController"];
myTicketController.settingsModel = settingsModel;
myTicketController.ticketStatusHandler = data;
myTicketController.rootDataModel = dataModel;
[myTicketController setModalPresentationStyle:UIModalPresentationFullScreen];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myTicketController animated:YES];
///////////////////////////////////////////////////////////////////////////////
//from MyTicketController.m - Load the next screen
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myNextController = (MyNextController *)[storyboard instantiateViewControllerWithIdentifier:@"MyNextController"];
myNextController.settingsModel = settingsModel;
myNextController.rootDataModel = dataModel;
[myNextController setModalPresentationStyle:UIModalPresentationFullScreen];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController: myNextController animated:YES];
所以我到了应用程序的末尾并加载了更多的 UIViewControllers。假设我在加载 [myNextController] 之后再加载 4 或 5 个 UIViewController。
有没有一种通用的方法来卸载内存中的所有 UIViewController,然后简单地重新加载 [myMenuController]?
【问题讨论】:
-
因为我不太确定我的答案,而且我不在我的 Mac 上,所以我将在这里发表评论。如何在每个控制器上放置标签,然后在一个方法中检查这些控制器是否处于活动状态,然后简单地关闭它。
-
听起来很酷,就像我正在寻找的一样。但我不知道该怎么做。这是我的第一个 iPhone 应用程序。
-
据我所知,您可以使用 [self.yourView setTag:1] 设置标签并使用 (UIView *)[self.parentView viewWithTag:1] 指向带有标签的对象: 1 在父视图中。但同样,我建议您自己尝试一下,然后环顾四周
-
我是在加载 UIViewControllers 时设置标签(如上面的示例),还是在它们的类构造中设置标签?
-
啊,对不起,devtron,好像我给你一个错误的答案,我不认为你可以在 UIViewController 上设置标签,你可以设置标签的是 UIView
标签: iphone xcode4 uiviewcontroller uistoryboard