创建一个可以模态呈现或推送到导航堆栈的UIView

时间:2012-05-23 16:54:40

标签: uiviewcontroller uinavigationcontroller presentmodalviewcontroller

我有一个项目详情视图,我想将它用于两个目的:

1)创建一个新项目 2)编辑现有项目

编辑时,视图将被推送到导航堆栈,从其父级获取导航栏。

在创建项目时,我想以模态方式呈现视图,但顶部仍然有一个导航栏,带有“完成”和“取消”按钮。

我不想要的是看到两个导航栏的视图,或者没有。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

为了实现这一点,我:

从我的视图中删除了导航栏。 当以模态方式启动时,首先创建一个导航控制器,然后以我的视图模式显示导航控制器作为根视图(即使我没有计划将任何其他东西推到堆栈上)。所以改变了这个:

StoreDetailView *storeDetailView = [[StoreDetailView alloc] initWithNibName:@"StoreDetailView" bundle:nil];
// ... configure the view, including setting delegate...
[self presentViewController:storeDetailView animated:YES completion: nil];

到此:

StoreDetailView *storeDetailView = [[StoreDetailView alloc] initWithNibName:@"StoreDetailView" bundle:nil];
// ... configure the view, including setting delegate...
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:storeDetailView];
[self presentViewController:navController animated:YES completion: nil];

然后在StoreDetailView中,根据委托是否设置确定导航栏的外观:

if (self.delegate == nil) {
    self.navigationItem.rightBarButtonItem = [self editButtonItem];
} else {
    [self setEditing:TRUE];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
}