导航栏视图作为模态视图?

Posted

技术标签:

【中文标题】导航栏视图作为模态视图?【英文标题】:Navigation Bar View As Modal View? 【发布时间】:2011-03-23 20:22:20 【问题描述】:

我有一个基于标签栏的应用程序。当用户点击一个按钮时,我试图显示一个如下所示的视图:

+----------------------------+
| |Cancel|   Title    |Done| |
+----------------------------+
|                            |
|             ...            |
+----------------------------+

在IB下,代码有如下层次结构:

+ File's Owner
+ First Responder
+ Nav Controller
  + Nav Bar
  + View Controller
    + View
    + Nav Item
      + Bar Button
      + Bar Button

使View 成为Nav Controller 的相等节点并没有帮助。所以我把View留作Nav Controller的子节点。

当一个按钮被点击时,我会调用以下代码:

FilePicker* picker = [[FilePicker alloc] init];
[self presentModalViewController:picker animated:YES];

为了完整起见,这里是FilePicker 的声明(由于故障排除,删除了额外的小部件)。添加/删除UINavigationControllerDelegate 没有帮助。

@interface FilePicker : UIViewController
  <UIPickerViewDelegate, UIPickerViewDataSource>

  UINavigationController* navController;


@property (retain, nonatomic) IBOutlet UINavigationController* navController;

不幸的是,我得到的只是空白视图(其他小部件在故障排除期间已被删除)。如何强制显示导航控制器? IB 不允许我将导航控制器设为视图连接(我只能将视图设为视图连接)。

【问题讨论】:

【参考方案1】:

在呈现您的模态视图之前,创建一个导航控制器对象,将根控制器设置为您的文件选择器视图。然后将导航控制器显示为模态视图。 (抱歉格式化...编辑器中的格式按钮不显示)

PickerView *pv = [[PickerView alloc] initWithNibName:@"PickerView" bundle:nil];
pv.ivar1 = value1;

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:pv];

[self.tabBarController presentModalViewController:nc animated:YES];
[nc release];
[pv release];

【讨论】:

我使用了错误的工具:如果我使用带有导航栏和选取器视图的 UIViewController,一切都会按预期工作。我应该尝试使用导航控制器。【参考方案2】:

我使用错误的工具:如果我使用带有导航栏和选取器视图的 UIViewController,一切都会按预期工作。我不应该使用导航控制器。

所以我的看法如下:

+ File's Owner
+ First Responder
+ View
  + Picker
  + Nav Bar
    + Nav Item
      + Bar Button
      + Bar Button

【讨论】:

以上是关于导航栏视图作为模态视图?的主要内容,如果未能解决你的问题,请参考以下文章

模态视图导航栏未正确显示

关闭模态视图后的状态栏和导航栏问题

模态segue推动顶部的附加导航栏滑动

呈现一个模态视图控制器,但不要隐藏导航栏

模态 Segue 进入没有导航栏的导航控制器

模态视图导航栏的位置 - iOS7