swi*_*ode 1 objective-c uiviewcontroller uinavigationcontroller ios
我正在使用ECSlidingViewController创建一个滑出菜单(如Facebook).
我有这个故事板:

如你所见,我有一个导航控制器.我有一个主要问题,即使是制作该控制器的用户创建的官方演示也没有实现:它在更改视图然后返回时不会保存视图控制器的状态.
因此,例如,当我打开应用程序时,橙色视图将始终是第一个视图viewDidLoad.然后我切换到绿色视图(第二个),然后单击按钮.它将该视图的背景颜色更改为红色.然后,如果我回到我的第一个视图,然后回到第二个视图,后者的背景颜色再次变为绿色.我希望它保持红色.
这是我切换视图的代码(in MenuViewController):
(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];
}];
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它始终每次都实例化一个新的VC.我希望它保存VC,如果没有创建它,则创建新的,然后显示一个.如果用户返回到已创建的视图,则应该只恢复已保存的视图,而不是创建新视图.
我已经把它Init View Controller放在导航控制器中,现在我该如何为我的视图实现这种保存/恢复机制?我希望它与2,3,4等一起工作......尽可能多的观点.
谢谢.
当你"返回"时,你基本上从导航堆栈弹出viewcontroller.此时,没有更多对该视图控制器的引用,并且它被取消分配,因此您将丢失所有更改.
您可以通过以下几种方式处理:
1)在父视图控制器(正在呈现的视图控制器)中保持对红色/绿色视图控制器活动的引用,并使用它而不是实例化新视图控制器.这不是非常友好的,但如果谨慎使用则可以使用.
在界面中放:
@property (nonatomic, strong) UIViewController* myGreenController;
Run Code Online (Sandbox Code Playgroud)
然后将实例化更改为
if (!self.myGreenController)
{
self.myGreenController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
}
...
self.slidingViewController.topViewController = self.myGreenController;
Run Code Online (Sandbox Code Playgroud)
2)理想情况下实现委托模式以将状态传递回父视图控制器(类似于如何设置一个简单的委托以在两个视图控制器之间进行通信?).然后下次需要viewController时,在呈现之前设置状态.
| 归档时间: |
|
| 查看次数: |
4759 次 |
| 最近记录: |