0

我是 iOS 编程的新手,我正在使用ECSlidingViewController创建一个滑出菜单(如 Facebook)。所以想象一下,如果我的菜单中引用了两个视图。

当我打开应用程序时,它显然会调用viewDidLoad我的顶视图(我菜单中的第一个)。如果我打开菜单并选择第二个视图,它也会要求viewDidLoad这样做。但是,如果我回到第一个视图,它将再次调用该方法,这是我不想要的。我有一些设置代码,如果可能的话,我不想重新实例化视图。我见过 Facebook,他们不会恢复视图,因为它会记住我在 Wall 上的滚动位置,例如,当我切换视图并返回时。

这是我在选择时触发的委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get identifier from selected
    NSString *identifier = [NSString stringWithFormat:@"%@", [self.menu objectAtIndex:indexPath.row]];

    // Add the selected view to the top view
    UIViewController *newTopVC = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    // Present it 
    [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = newTopVC;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];
} 

如果已经创建了某个 VC,有没有办法以某种方式获得它?这样,它只会调用viewWillAppear,并且不会viewDidLoad超过一次。

谢谢你。

4

1 回答 1

1

可以使用导航控制器。当你想进入第二个视图时,你可以将视图控制器推送到导航视图控制器上,当你返回时,你可以将它从导航控制器中弹出。

编辑:

如果你有 3 个视图,你仍然可以使用 navigationcontroller。与上述相同的逻辑。但请记住在导航控制器中删除同一视图控制器的双重实例。查看此页面:如何从 uinavigationcontroller 堆栈中删除特定的视图控制器?. 检查特定的 viewcontroller 是否存在,如果存在,请将其移除然后将其推到顶部。

于 2013-04-26T18:58:01.207 回答