如何像UITabBar应用程序一样保持视图活跃?

时间:2014-03-25 18:15:54

标签: ios objective-c uiviewcontroller

我正在创建一个具有不同视图的应用,您可以在此屏幕截图中看到。 http://i.gyazo.com/f98661c649e4ba617057dd4ba7c21e7d.png

然而,当我点击“过渡”时,它只会再次使用viewDidLoad加载视图,每次都这样做,因此它在打开时始终会重置。但是当你有一个标签式应用程序时,只需用viewDidLoad加载它,然后每当你再次打开它时它就会加载viewDidAppear,因为它已经加载了。

有没有人知道如何让控制器像标签应用程序一样保持活动状态?

*标签式应用程序的图像 - http://s1.ibtimes.com/sites/www.ibtimes.com/files/styles/v2_article_large/public/2013/06/18/ios-7-notonthisphone-2.PNG

以下是视图加载的方式。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *menuItem = self.menuItems[indexPath.row];

    // This undoes the Zoom Transition's scale because it affects the other transitions.
    // You normally wouldn't need to do anything like this, but we're changing transitions
    // dynamically so everything needs to start in a consistent state.
    self.slidingViewController.topViewController.view.layer.transform = CATransform3DMakeScale(1, 1, 1);

    if ([menuItem isEqualToString:@"Transitions"]) {
        self.slidingViewController.topViewController = self.transitionsNavigationController;
    } else if ([menuItem isEqualToString:@"Settings"]) {
        self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MESettingsNavigationController"];
    }


    [self.slidingViewController resetTopViewAnimated:YES];
}

决定与所有人分享我的文件,如果有人是这方面的专家(显然我不是其中之一):http://www.mediafire.com/download/1q6n01514bf78jo/Sldiing_App.zip

2 个答案:

答案 0 :(得分:1)

好吧,留着他们。

维护一些容器(数组或单个属性/ ivars等)并保留对它们的引用。然后,当用户点击“转换”时,不要重新创建视图及其控制器,而是将它们放回原位。

您可能需要维护每个视图控制器子视图控制器调用层次结构并操纵导航控制器导航堆栈(请参阅UIViewController的viewControllers属性的文档)。 虽然这是一项工作,但不是免费的。

或者,如果您没有涉及导航控制器,或者不需要在您要保持活动的一堆视图控制器上堆叠更多视图控制器,那么您可以尝试将它们移出屏幕(对于负坐标或超出窗口边界。但是不要使用常量。我们都不知道未来设备将具有哪些屏幕尺寸。在运行时从实际窗口中获取边界。)

答案 1 :(得分:0)

每当你点击“转换”时,我假设你正在对视图控制器执行alloc / init,然后将其推送到主视图的任何视图堆栈。相反,当你的侧边菜单加载时,分配/初始化一个全局视图控制器,当你点击“转换”而不是每次都创建一个新的时,将它推到你的堆栈上(假设你的菜单持续存在并且每次都没有加载它也出现了)