在导航控制器中重用视图,并将其作为带有故事板的模态弹出框



我有一个允许您编辑/创建项的详细视图。我希望能够在一个屏幕上创建这些项目,所以我使用了一个模态窗口,在工具栏中有取消/保存。

在第二个窗口中,我来自一个表视图,所以我想在现有的导航控制器中显示项目。

我想知道我是否可以在故事板中使用相同的视图/视图控制器来完成这两个任务?如果我检测到我正在从导航控制器启动,我是否需要手动将工具栏添加到视图并隐藏它?

我的另一个解决方案是添加一个空的导航控制器,并有模态弹出按钮指向导航控制器,而导航控制器又包含编辑视图(然后当我发现它是导航堆栈中唯一的视图时添加按钮)

我应该做其中一件事吗?还是应该在故事板中复制视图?

你可以用一个视图控制器来做这件事。我建议你" 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属性来控制你想要的行为(即设置所有字段为只读等)

最新更新