UITabBarController
跟UINavigationController类似,UITabBarController也可以轻松管理多个控制器,轻松完成控制器之间的切换.
UITabBarController的简单使用
UITabBarController的使用步骤:
1> 初始化UITabBarController;
2> 设置UIWindow的rootViewController为UITabBarController;
3> 根据具体情况,通过addChildViewController方法添加对应个数的子控制器.
UITabBarController的子控制器
添加单个子控制器
1
-(
void
)addChildViewController:(UIViewController *)childController;
设置子控制器数组
1
@property(nonatomic,copy) NSArray *viewControllers;
UITabBar
如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件.
UITabBarButton
UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性实现.
UITabBarItem有以下属性影响着UITabBarButton的内容
1
2
3
4
5
6
7
8
// 标题文字
@property(nonatomic,copy) NSString *title;
// 图标
@property(nonatomic,retain) UIImage *image;
// 选中时的图标
@property(nonatomic,retain) UIImage *selectedImage;
// 提醒数字
@property(nonatomic,copy) NSString *badgeValue;
App主流UI框架结构
Modal
除了push之外,还有另外一种控制器的切换方式,那就是Modal. 任何控制器都能够通过Modal的形式展示出来.
Modal的默认效果: 新控制器从屏幕的最底部往上钻, 直到盖住之前的控制器为止.
以Modal的形式展示控制器
1
-(
void
)presentViewController:(UIViewController *)viewControllerToPresent animated: (
BOOL
)flag completion:(
void
(^)(
void
))completion
关闭当初Modal出来的控制器
1
-(
void
)dismissViewControllerAnimated: (
BOOL
)flag completion: (
void
(^)(
void
))completion;
自定义UITabBarController和TabBar
如何自定义TabBar
1> 首先自定义UITabBarController : 新建一个类, 继承自UITabBarController ;
2> 新建一个类, 继承自UIView, 用来做TabBar, 封装内部的按钮 ;
3> 在自定义的UITabBarController 中创建自定义的TabBar ,添加到默认的UITabBar上面 .
导航栏主题
为了保证整个项目的导航栏样式一样, 可统一设置导航栏的主题 ;
取得导航栏的appearance对象, 操作它就能设置导航栏的主题 ;
1
UINavigationBar *navBar = [UINavigationBar appearance];
常用主题设置:
1> 导航栏背景
1
-(
void
)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics;
2> 标题
1
2
3
@property(nonatomic,copy) NSDictionary *titleTextAttributes;
// 字典中能用到的key在UIStringDrawing.h中
// 最新版本的key在UIKit框架的NSAttributedString.h中
3> iOS7返回按钮的箭头样式
1
@property(nonatomic,retain) UIColor *tintColor;
导航栏按钮主题
导航栏的左上角和右上角都是UIBarButtonItem对象, 为了统一样式, 也可以设置UIBarButtonItem的主题.
1
UIBarButtonItem *item = [UIBarButtonItem appearance];
设置主题的方法:
1> 背景
1
-(
void
)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;
2> 文字
1
-(
void
)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;
3> 导航栏返回按钮背景
1
-(
void
)setBackButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;
自定义导航栏控制器
自定义导航栏控制器的步骤: 新建一个类, 继承自UINavigationController .
自定义导航栏的价值 :
1> 重写push方法就可以拦截所有压入栈中的子控制器, 统一做一些处理 .
1
-(
void
)pushViewController:(UIViewController *)viewController animated:(
BOOL
)animated;
2> 重写pop方法就可以拦截所有子控制器的出栈 .
1
-(UIViewController *)popViewControllerAnimated:(
BOOL
)animated;
琐碎知识点
为了在push控制器时隐藏UITabBar, 需要做以下设置:
1
viewController.hidesBottomBarWhenPushed = YES;
initailize , load方法的区别:
1> initailize ,load 都是类方法 ;
2> 当一个类被装载进内存时, 就会调用一次 load 方法(当时这个类还不可用) ;
3> 当第一次使用这个类时, 就会调用一次 initailize 方法.
状态栏的设置
程序启动时隐藏状态栏, Hide during application launch
程序启动完毕后再显示回状态栏(前提是状态栏交给了UIApplication管理) ;
application.statusBarHidden = NO ;
UITabBarController
跟UINavigationController类似,UITabBarController也可以轻松管理多个控制器,轻松完成控制器之间的切换.
UITabBarController的简单使用
UITabBarController的使用步骤:
1> 初始化UITabBarController;
2> 设置UIWindow的rootViewController为UITabBarController;
3> 根据具体情况,通过addChildViewController方法添加对应个数的子控制器.
UITabBarController的子控制器
添加单个子控制器
1
|
-(
void
)addChildViewController:(UIViewController *)childController;
|
设置子控制器数组
1
|
@property(nonatomic,copy) NSArray *viewControllers;
|
UITabBar
如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件.
UITabBarButton
UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性实现.
UITabBarItem有以下属性影响着UITabBarButton的内容
1
2
3
4
5
6
7
8
|
// 标题文字
@property(nonatomic,copy) NSString *title;
// 图标
@property(nonatomic,retain) UIImage *image;
// 选中时的图标
@property(nonatomic,retain) UIImage *selectedImage;
// 提醒数字
@property(nonatomic,copy) NSString *badgeValue;
|
App主流UI框架结构
Modal
除了push之外,还有另外一种控制器的切换方式,那就是Modal. 任何控制器都能够通过Modal的形式展示出来.
Modal的默认效果: 新控制器从屏幕的最底部往上钻, 直到盖住之前的控制器为止.
以Modal的形式展示控制器
1
|
-(
void
)presentViewController:(UIViewController *)viewControllerToPresent animated: (
BOOL
)flag completion:(
void
(^)(
void
))completion
|
关闭当初Modal出来的控制器
1
|
-(
void
)dismissViewControllerAnimated: (
BOOL
)flag completion: (
void
(^)(
void
))completion;
|
自定义UITabBarController和TabBar
如何自定义TabBar
1> 首先自定义UITabBarController : 新建一个类, 继承自UITabBarController ;
2> 新建一个类, 继承自UIView, 用来做TabBar, 封装内部的按钮 ;
3> 在自定义的UITabBarController 中创建自定义的TabBar ,添加到默认的UITabBar上面 .
导航栏主题
为了保证整个项目的导航栏样式一样, 可统一设置导航栏的主题 ;
取得导航栏的appearance对象, 操作它就能设置导航栏的主题 ;
1
|
UINavigationBar *navBar = [UINavigationBar appearance];
|
常用主题设置:
1> 导航栏背景
1
|
-(
void
)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics;
|
2> 标题
1
2
3
|
@property(nonatomic,copy) NSDictionary *titleTextAttributes;
// 字典中能用到的key在UIStringDrawing.h中
// 最新版本的key在UIKit框架的NSAttributedString.h中
|
3> iOS7返回按钮的箭头样式
1
|
@property(nonatomic,retain) UIColor *tintColor;
|
导航栏按钮主题
导航栏的左上角和右上角都是UIBarButtonItem对象, 为了统一样式, 也可以设置UIBarButtonItem的主题.
1
|
UIBarButtonItem *item = [UIBarButtonItem appearance];
|
设置主题的方法:
1> 背景
1
|
-(
void
)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;
|
2> 文字
1
|
-(
void
)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;
|
3> 导航栏返回按钮背景
1
|
-(
void
)setBackButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;
|
自定义导航栏控制器
自定义导航栏控制器的步骤: 新建一个类, 继承自UINavigationController .
自定义导航栏的价值 :
1> 重写push方法就可以拦截所有压入栈中的子控制器, 统一做一些处理 .
1
|
-(
void
)pushViewController:(UIViewController *)viewController animated:(
BOOL
)animated;
|
2> 重写pop方法就可以拦截所有子控制器的出栈 .
1
|
-(UIViewController *)popViewControllerAnimated:(
BOOL
)animated;
|
琐碎知识点
为了在push控制器时隐藏UITabBar, 需要做以下设置:
1
|
viewController.hidesBottomBarWhenPushed = YES;
|
initailize , load方法的区别:
1> initailize ,load 都是类方法 ;
2> 当一个类被装载进内存时, 就会调用一次 load 方法(当时这个类还不可用) ;
3> 当第一次使用这个类时, 就会调用一次 initailize 方法.
状态栏的设置
程序启动时隐藏状态栏, Hide during application launch
程序启动完毕后再显示回状态栏(前提是状态栏交给了UIApplication管理) ;
application.statusBarHidden = NO ;