我是iOS编程新手,我正在使用ECSlidingViewController创建一个幻灯片菜单(如Facebook)。想象一下,如果我在菜单中引用了两个视图。
当我打开应用程序时,显然会为我的顶视图(我菜单中的第一个)调用viewDidLoad
。如果我打开菜单并选择第二个视图,它也会调用viewDidLoad
。但是,如果我回到第一个视图,它将再次调用该方法,这是我不想要的。我有一些设置代码,如果可能的话我不想重新实现视图。我见过Facebook并且他们没有重新恢复视图,因为它记得我在我的墙上的滚动位置,例如,当我切换视图并返回后。
这是我选择时触发的委托方法:
- (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
。
谢谢。
答案 0 :(得分:1)
可以使用navigationcontroller。当你想进入第二个视图时,可以将视图控制器推到导航视图控制器上,当你返回时,可以将它从导航控制器中弹出。
编辑:
如果您有3个视图,您仍然可以使用navigationcontroller。与上述逻辑相同。但请记住在navigationcontroller中删除同一viewcontroller的双实例。看看这个页面:How to remove a specific view controller from uinavigationcontroller stack?。检查特定的视图控制器是否存在,如果存在,请删除然后将其推到顶部。