自定义导航和容器视图

时间:2014-07-29 08:36:28

标签: objective-c navigation navigationbar container-view

我想要什么

完全自定义的导航栏,它将保留并允许用户通过自定义模态转换进行交互。

我做了什么

我已经构建了一个父视图控制器,它包含底部的Container视图和顶部的视图(自定义导航栏)。容器视图嵌入了一个视图控制器,可以以模态方式显示其他视图控制器。

以模态方式呈现的视图控制器使用自定义转换(UIViewControllerTransitioningDelegate)从底部弹出,仅占据底部视图控制器的一部分(即保持菜单可见)。

当第一个视图控制器以模态方式显示时,仍可以与自定义导航菜单进行交互。但是,如果第一个模态呈现的视图控制器依次呈现另一个视图控制器,则自定义导航栏不会响应用户交互。

|  NAV BAR  |             
|-----------|             |------------|               |------------|              
| Container |             |   View     |               |    View    |             
|   view    |-> EMBED ->  | Controller |-> Presents -> | Controller |-> Presents ->
|           |             |            |    Modally    |    1st     |    Modally   

(续)

  |------------|
  |    View    |
->| Controller |
  |     2nd    |

当第一个视图控制器以模态方式显示时,导航栏仍会响应触摸。当第二个(以及该线下的任何其他线路(即第3个,第4个......))出现时,导航栏仍然可见但不响应用户触摸。

Github上有一个示例项目,说明了我遇到的问题。

我的问题是什么

无论我以模态方式呈现多少个视图控制器,我都希望能够点按导航栏。

我应该接近这项工作吗?

完成我想做的最好的方法是什么?有没有标准的方法来创建完全自定义的导航栏(即几个按钮,自定义高度等)?

1 个答案:

答案 0 :(得分:0)

请根据Github项目在文件CVTFirstViewController.h中更改第二个视图控制器的模式表示样式。

使用此代码

     secondViewController.modalPresentationStyle = UIModalPresentationCurrentContext;

而不是

     secondViewController.modalPresentationStyle = UIModalPresentationCustom;