您的位置:首页 > 其它

Controller <-> View 一般视图层级

2016-08-10 22:49 316 查看

关于 self.navigationController.view

相信看过 MBProgressHUD 官方例子
HudDemo
代码的同学应该看到过下述代码:

1

HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];

当时,你可能会对
self.navigationController.view
有些疑惑,这是什么玩意?其实,如果我们查看下
UINavigationController.h
文件就会发现,
UINavigationController
其实是继承自
UIViewController
的,那么它拥有
view
属性也就不奇怪了。

1

NS_CLASS_AVAILABLE_IOS(2_0) @interface UINavigationController : UIViewController

下面,我们会结合 Reveal 清楚地看到
self.navigationController.view
到底是什么东西,稍安勿躁。

显示 MBProgressHUD

初始化 MBProgressHUD 时需要我们传入一个
UIView
类型的参数
view
,而显示 MBProgressHUD 的原理其实就是用
addSubview
方法将 MBProgressHUD 添加为这个
view
的子视图。

我们先来看看未显示 MBProgressHUD 时,应用的视图层次结构。其中 1 为
UIWindow
,即
self.view.window
,2 是
UINavigationController
view
,即我们前面提到的
self.navigationController.view
,3 为
self.view
,4 为导航栏
UINavigationBar
,即
self.navigationController.navigationBar




通过这张图,我们清楚地看到了
self.view.window
self.navigationController.view
self.view
self.navigationController.navigationBar
在应用的视图层次中所处的位置,以及它们之间的层次关系。

下面,我们就对比一下 MBProgressHUD 分别在
self.view.window
self.navigationController.view
self.view
上显示时应用的视图层次结构,以及导航栏上按钮的可用情况。

方式 1 - On self.view.window

使用这种方式时,MBProgressHUD 被添加到了
self.view.window
上,它与
self.navigationController.view
在视图层次上是平级的,同为
self.view.window
的子视图。但是由于 MBProgressHUD 是后添加的,所以它处于
self.navigationController.view
的上方,因此导航栏上的按钮均不可点击。



方式 2 - On self.navigationController.view

使用这种方式时,MBProgressHUD 被添加到了
self.navigationController.view
上,它与
self.navigationController.navigationBar
在视图层次上是平级的,同为
self.navigationController.view
的子视图。但是由于 MBProgressHUD 是后添加的,所以它处于
self.navigationController.navigationBar
的上方,因此导航栏上的按钮也均不可点击。



方式 3 - On self.view

使用这种方式时,MBProgressHUD 被添加到了
self.view
上,不管
self.view
或 MBProgressHUD 是否占满整个屏幕,
self.navigationController.navigationBar
永远处于 MBProgressHUD 的上方。因此,导航栏上的按钮一直是可点击的。



总结

当你需要让导航栏上的按钮不可点击的时候,可以选择使用
方式 1
方式 2
显示 MBProgressHUD 。反之,可以选择
方式 3


参考链接:

1.http://blog.leichunfeng.com/blog/2015/03/16/talking-about-the-usage-of-mbprogresshud-combined-with-reveal/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐