我有一个允许您编辑/创建项的详细视图。我希望能够在一个屏幕上创建这些项目,所以我使用了一个模态窗口,在工具栏中有取消/保存。
在第二个窗口中,我来自一个表视图,所以我想在现有的导航控制器中显示项目。
我想知道我是否可以在故事板中使用相同的视图/视图控制器来完成这两个任务?如果我检测到我正在从导航控制器启动,我是否需要手动将工具栏添加到视图并隐藏它?
我的另一个解决方案是添加一个空的导航控制器,并有模态弹出按钮指向导航控制器,而导航控制器又包含编辑视图(然后当我发现它是导航堆栈中唯一的视图时添加按钮)
我应该做其中一件事吗?还是应该在故事板中复制视图?
你可以用一个视图控制器来做这件事。我建议你" push "编辑/创建视图控制器。这将涵盖您只想查看信息的情况,并使您能够轻松地导航回来。在你想要编辑信息的情况下,你将创建你的取消和保存工具栏按钮,并以编程方式在取消/保存视图控制器的viewWillAppear中如下所示。当你设置它们时,它们会简单地覆盖当前按钮(不需要隐藏任何东西):
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancelButton)];
self.navigationItem.leftBarButtonItem = cancelButton;
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self
action:@selector(saveButton)];
self.navigationItem.rightBarButtonItem = saveButton;
在父视图控制器的prepareForSegue方法中,您可以设置一个属性,指示取消/保存视图控制器显示或编辑,如下所示:
if ([segue.identifier isEqualToString:@"toCancelAddVC"]) {
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
destinationVC = (CancelAddViewController*)navController.topViewController;
destinationVC.myState = @"cancelSave"; // or @"view"
注意:你也可以使用这个myState属性来控制你想要的行为(即设置所有字段为只读等)