ui--UINavigationController

来源:互联网 发布:vb.net安装包 编辑:程序博客网 时间:2024/05/19 16:05

#define KWS(weakSelf) _weak _typeof(&*self)weakSelf=self //block 把强强引用转化成弱引用, 在代码中用block 反向传值可能会出现报警

=============================

UINavigationController/导航控制器

=============================

 QQ:2530432526

二.导航控制器细讲

【注】导航控制器发生作用,有三个类共同作用


UINavigationController

//本身并不显示无需定制

UINavigationBar

//属于导航控制器(子对象),需要定制

UINavigationItem

//显示到导航条上,属于每个导航中的视图控制器,每个视图控制器有自己的BarItem,需要每个页面单独定制


1.UINavigationBar (导航条,普通视图控件,父类为UIView)

每个导航控制器有且只有一个导航条(所有的视图控制器共用一个导航条)

导航控制器中的导航条高度固定44


(1)拿到导航条的方法:

self.navigationController.navigationBar

(2)设置导航条的风格:

self.navigationController.navigationBar.barStyle

UIBarStyleDefault           默认

下面三中iOS7之后几乎一致

    UIBarStyleBlack            

    UIBarStyleBlackOpaque       

    UIBarStyleBlackTranslucent 

设置导航条的风格样式会波及到状态栏

(3)设置导航条的背景图片

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

//UIBarMetricsDefault 对应iPhone竖屏(人像模式)

  //UIBarMetricsLandscapePhone 对应iPhone横屏(风景模式)

(4)是否隐藏导航条

@property(nonatomic,getter=isNavigationBarHidden)BOOL navigationBarHidden;

- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated加动画的


注意:图片严格遵守屏幕宽*44的尺寸,贴图不会波及到状态栏,而且状态栏会自动呈现出最初的样式


2.定制NavigationItem  加载在UINavigationBar上的

//每个页面单独定制自己的Item

(1)设置导航条上显示的标题视图,会将视图自动居中显示,在外部设置x,y无效果

self.navigationItem.titleView

self.navigationItem.title


(2)UIBarButtonItem

1、通过初始化标题的方法

UIBarButtonItem *item = [[UIBarButtonItemalloc] initWithTitle:@"左侧"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(leftItemClicked:)];

UIBarButtonItemStylePlain (iOS7中将Item的圆角矩形和边框全部去掉了)

2、用系统提供的样式初始化得到UIBarButtonItem的对象

UIBarButtonItem *item1 = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCameratarget:selfaction:@selector(rightItemClicked:)];

3、开发中最常用的创建UIBarButtonItem的方法(这个一定要会)

UIBarButtonItem *item2 = [[UIBarButtonItemalloc] initWithCustomView:customBtn];


(3)显示在导航条的左侧和右侧

self.navigationItem.leftBarButtonItem  设置左侧1个视图

self.navigationItem.leftBarButtonItems 设置左侧1组视图,数组的元素必须是UIBarButtonItem的对象

self.navigationItem.rightBarButtonItem 设置右侧1个视图

self.navigationItem.rightBarButtonItems 设置右侧1组视图,数组的元素必须是UIBarButtonItem的对象


注意:当我们用leftBarButtonItem覆盖掉系统原本的返回上级界面的按钮,这个时候,UINavigationController的测滑是不能用的。


3.定制ToolBar(工具条)

//每个导航控制器,还配备了工具条(44坐标高),默认隐藏

【注】toolBar属于NavigationController,一个导航控制器,只有一个

【注】toolBarItems属于每个视图控制器,每个视图控制器单独定制

(1)拿到导航控制器中工具栏的方法

self.navigationController.toolbarHidden=NO

self.navigationController.toolbar

(2)设置工具栏的背景图片

- (void)setBackgroundImage:(UIImage *)backgroundImage forToolbarPosition:(UIBarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics

(3)self.toolbarItems 设置底部,数组中每个元素必需是UIBarButtonItem


注意:开发中,底部工具栏往往自己通过UIView+UIButton定制



再注意:视图控制器的title属性能同时为navigationItem.title和tabBarItem.title赋值


三.视图控制器间传值(面试题)

【及时性】

ΔΔ代理传值

Block传值

Δ通知传值(以后说)


【非及时性】

全局变量传值 (只能是基础数据类型)

单例传值(传递对象数据)

//例子:1、我们会把用户信息放到单例里面,当我们需要用户的信息的时候,直接从单例里面取。

文件传值(最慢),存数据库。


四.NSUserDefaults的使用(沙盒保存基本数据的方法)

1、介绍:单例,每个应用程序有且只有一个NSUserDefaults对象,本质是应用程序特定路径下的一个plist文件


2、用途:用于实现数据持久化存储,存储数据量相对较小的数据(比如:用户名,密码。或者程序的一些设置信息等)


3、只能存储基本数据类型:(NSString,NSArray,NSDictionary,NSData,NSDate,bool,NSURL,NSNumber),NSArray,NSDictionary 中的元素也必须是基本数据类型(比如 :NSArray中是字符串,能够写入到UserDefaults,NSArray中是视图控制器对象,则此array不能写入)


4、用法

      1)NSUserDefaults *defaluts = [NSUserDefaultsstandardUserDefaults];

//拿到单例

      2)- (void)setObject:(id)value forKey:(NSString *)defaultName;

//向NSUserDefaults,写入数据(内存)

   3)- (void)removeObjectForKey:(NSString *)defaultName;

//删除NSUserDefaults中的对应数据

   4)- (id)objectForKey:(NSString *)defaultName;

//从UserDefaults中读取数据,如果从来没写入过数据,读到的为空

      5)[defaluts synchronize];

//将数据同步给应用程序(执行真正写入plist的操作)

注意:第二个方法和第三个方法执行完之后,一定要执行第5个方法


0 0
原创粉丝点击