UIKit框架(11)导航控制器UINavigationController

介绍多控制器管理中非常重要的一个控制器UINavigationController

东源网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联建站成立于2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

它负责管理多个控制器,能够轻松完成控制器间的切换

如:iOS系统上的设置

    UIKit框架(11)导航控制器UINavigationController

父类是UIViewController,但其功能并非是管理view,而是管理多个控制器

控制器栈式管理: 

     当切换时,将一个控制器入栈,当返回时,栈顶控制器出栈

     当前显示的永远是栈顶控制器的view,栈结构如下:

@property(nonatomic, copy) NSArray *viewControllers  //管理的所有控制器     
@property(nonatomic, readonly, retain) UIViewController *topViewController //当前显示的控制器

  • 代码使用导航控制器

导航控制器的创建:

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController

     rootViewController参数:根控制器,即管理的第一个页面

跳转动作:

     使用导航控制器的pushViewController方法:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

     也就是说,跳转动作的执行者是导航控制器,而不是源控制器

     源控制器可以通过它的属性访问到导航控制器:

@property(nonatomic, readonly, retain) UINavigationController*navigationController

     如一个跳转动作:

AMViewController *vc = [[AMViewControllerTwo alloc] init];
[self.navigationController pushViewController:vc animated:YES];

     

返回动作:

     非根控制器的导航栏上,都默认有一个返回按钮,点击此按钮能够自动返回

     也可以通过代码返回,导航控制器的方法:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated //返回一个控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated //返回到指定控制器
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated //返回到根控制器

  • storyboard使用导航控制器

     UIKit框架(11)导航控制器UINavigationController

删除storyboard默认的控制器,添加 UINavigationController,并设置为初始控制器。

     UIKit框架(11)导航控制器UINavigationController

添加一个控制器,连接导航控制器的root view controller属性

     UIKit框架(11)导航控制器UINavigationController

控制器间的跳转可以直接连线,选择show

     UIKit框架(11)导航控制器UINavigationController

     同样支持自动型Segue和手动型Segue

     控制器之间传递数据和modal方式切换一样

导航栏上按钮的添加

    导航栏上的按钮类型是UIBarButtonItem

     UIKit框架(11)导航控制器UINavigationController

     

  • 导航栏

导航控制器除了管理多个控制器外,还有一个到导航栏,相关属性:

@property(nonatomic, readonly) UINavigationBar *navigationBar  //导航栏
@property(nonatomic, getter=isNavigationBarHidden) BOOL navigationBarHidden //导航栏隐藏使能

导航栏上的数据由UINavigationItem对象管理,其属性如下:

@property(nonatomic, copy) NSString *title  //中间的标题
@property(nonatomic, retain) UIView *titleView //中间的视图
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem //左侧的返回按钮
@property(nonatomic, retain) UIBarButtonItem *leftBarButtonItem //左侧自定义按钮
@property(nonatomic, copy) NSArray *leftBarButtonItems 
@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem //右侧自定义按钮
@property(nonatomic, copy) NSArray *rightBarButtonItems

导航栏对象UINavigationBar管理显示数据的方式和导航控制器管理多个控制器类似,也是用栈的结构:

@property(nonatomic, copy) NSArray *items
@property(nonatomic, readonly, retain) UINavigationItem *topItem

但通常不直接使用导航栏对象来设置显示的数据

UIViewController包含一个navigationItem属性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通过这个属性,能够直接设置当前页面的导航栏数据

  • 工具栏

导航控制器还管理着一个工具栏,这个工具栏默认是隐藏的

@property(nonatomic, readonly) UIToolbar *toolbar
- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated
@property(nonatomic, getter=isToolbarHidden) BOOL toolbarHidde

    UIKit框架(11)导航控制器UINavigationController

     

工具栏UIToolBar管理方式导航栏UINavigationBar的管理方式类似

UIViewController包含一个tabBarItem属性:

@property(nonatomic, readonly, retain) UINavigationItem *navigationItem

     通过这个属性,能够直接设置当前页面的工具栏数据

@property(nonatomic, retain) UITabBarItem *tabBarItem

  • 导航控制器子类

定义一个导航控制器子类的好处是:

     让项目中所有的导航控制器都遵循统一的一些行为,应让所有的导航控制器为自定义的UINavigationController的子类,在子类中设定这些统一的行为。

UINavigationBar设置背景图片   

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

UINavigationBar设置文字属性     

@property(nonatomic, copy) NSDictionary *titleTextAttributes

一些控件遵循<UIAppearance>协议,通过协议中的appearance方法能够返回全局对象

+ (instancetype)appearance

通过全局对象能够设置一些全局的特征

设置导航栏的tintColor

[UINavigationBar appearance].tintColor = [UIColor whiteColor];

设置导航栏按钮的字体

[UIBarButtonItem appearance] setTitleTextAttributes:attrDict forState:UIControlStateNormal];

    全局的属性设置,执行一次即可

    将这些代码放在导航控制器的viewDidLoad方法中,当出现多个导航控制器时,全局属性设置会执行多次。

     保证全局属性只执行一次的方案是添加到initialize方法中

另外可以使用一个类,管理所有UIKit对象的appearance的设置,用以实现App皮肤的切换

分享文章:UIKit框架(11)导航控制器UINavigationController
网站网址:https://www.cdcxhl.com/article36/ggessg.html

成都网站建设公司_创新互联,为您提供动态网站营销型网站建设网站设计公司网页设计公司电子商务外贸建站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设