重复使用导航控制器内的视图和作为故事板的模态弹出窗口

时间:2014-08-07 13:25:24

标签: ios objective-c uiviewcontroller uistoryboard

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用单个视图控制器执行此操作。我建议你“推”编辑/创建视图控制器。这将涵盖您只想查看信息并使您能够轻松导航的情况。如果要编辑信息,可以在取消/保存视图控制器的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;

在父viewController的prepareForSegue方法中,您可以设置一个属性,指示取消/保存viewController显示或编辑如下:

if ([segue.identifier isEqualToString:@"toCancelAddVC"]) {
    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
    destinationVC = (CancelAddViewController*)navController.topViewController;
destinationVC.myState = @"cancelSave"; // or @"view"

注意:您也可以使用此myState属性来控制所需的行为(即将所有字段设置为只读等等。