8、iOS 开发之多控制器管理
2015-08-29 03:50
393 查看
控制器UIViewController的两个属性
1> 先加载storyboard文件
2> 初始化storyboard控制器
2.”直接创建
WBViewController *wb = [[WBViewController alloc] init];
* 在loadview方法里面添加一些控件
3.”通过关联xib创建
1> 用initWithNibName:指定xib创建(此时xib的名称不受限制)
2> 不指定xib的匹配方式
4.”视图控制器View的创建流程”
二、UINavigationController的使用
1.”UINavigationController的使用步骤
2.”UINavigationController的子控制器”
1> 属性
2> 方法
补充:
pushViewController:方法可以对添加到栈中的控制器进行”拦截”,通过拦截可以对viewController进行设置,达到统一的效果
当然,在控制器的自身的方法viewDidLoad方法中,可以对拦截设置的效果进行覆盖,
方法的执行顺序:pushViewController–> viewDidLoad
四、控制器的生命周期
1.生命周期的几个方法(”次序同时也是生命周期执行的顺序”)
1.Segue的属性
2.segue的类型
1> 自动型:点击控件后自动跳转
2> 手动型:需要手动写代码执行Segue
3.performSegueWithIdentifier:sender:的执行过程
1> 根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象,设置源控制器和目标控制器
2> 为跳转做准备
3> 调用Segue对象的- (void)perform;方法执行界面跳转
在源控制器的perpareForSegue:sender:方法中根据segue参数获得目标控制器,直接传递数据过去
2.逆传
源控制器成为目标控制器的
1.UITabBar
2.UITabBarItem的属性
3.使用步骤:
代码实现
补充:
例子:
storyboard实现
tabBarItem和navigationItem tabBarItem-->UITabBarController navigation-->UINavigationController
一、控制器的创建方式
1.”通过storyboard方式创建1> 先加载storyboard文件
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
2> 初始化storyboard控制器
// 初始化箭头所指控制器 WBViewController *wb = [storyboard instantiateInitialViewController]; // 通过一个标识初始化对应的控制器 WBViewController *wb = [storyboard instantiateViewControllerWithIdentifier:@"wb"];
2.”直接创建
WBViewController *wb = [[WBViewController alloc] init];
* 在loadview方法里面添加一些控件
3.”通过关联xib创建
* 通过xib创建的视图控制器是有优先级的 * xib的细节:xib的"File's Owner"代表着界面由哪个类来管理,必须指定"File's Owner"的class,然后"File's Owner"的 view 与xib进行连线"此处一定要谨记"
1> 用initWithNibName:指定xib创建(此时xib的名称不受限制)
// xib的名字不受限制,可以与类名不一致 WBViewController *wb = [[WBViewController alloc] initWithNibName:@"WBViewControlller" bundle:nil];
2> 不指定xib的匹配方式
// 只识别两种,优先匹配WBView.xib,在匹配WBViewController.xib WBViewController *wb = [[WBViewController alloc] init];
4.”视图控制器View的创建流程”
1> 根据loadView中的代码去创建 2> 根据storyboard的描述去创建 3> 根据nibName对应xib的描述去创建 4> 根据WBView.xib的描述去创建 5> 根据WBViewController.xib的描述去创建 6> 创建一个空的view
二、UINavigationController的使用
1.”UINavigationController的使用步骤
// 初始化UINavigationController UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:one]; // 设置根控制器 self.window.rootViewController = nav; // 添加子控制器 [nav addChildViewController:one]; [nav pushViewController:one animated:YES]; nav.viewControllers = @[one];
2.”UINavigationController的子控制器”
1> 属性
@property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers;
2> 方法
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; - (UIViewController *)popViewControllerAnimated:(BOOL)animated; - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
补充:
pushViewController:方法可以对添加到栈中的控制器进行”拦截”,通过拦截可以对viewController进行设置,达到统一的效果
当然,在控制器的自身的方法viewDidLoad方法中,可以对拦截设置的效果进行覆盖,
方法的执行顺序:pushViewController–> viewDidLoad
三、UINavigationBar内容的设置
UINavigationItem的属性// 下一个视图的返回按钮 @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem; // 中间标题的视图 @property(nonatomic,retain) UIView *titleView; // 中间标题的文字 @property(nonatomic,copy) NSString *title; // 左上角的视图 @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem; // 右上角的视图 @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
四、控制器的生命周期
1.生命周期的几个方法(”次序同时也是生命周期执行的顺序”)
// 加载view loadView // 加载完毕 viewDidLoad // 将要显示 viewWillAppear // 已经显示 viewDidAppear // 将要消失 viewWillDisappear // 已经消失 viewDidDisappear // 内存警告 didReceiveMemoryWaring // 即将被卸载 viewWillUnload // 清空 dealloc // 卸载完毕 viewDidUnload
五、Segue的使用
storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象1.Segue的属性
// 唯一标识 @property (nonatomic,readonly) NSString *identifier; // 来源控制器 @property (nonatomic,readonly) id sourceViewController; // 目标控制器 @property (nonatomic,readonly) id destinationViewController;
2.segue的类型
1> 自动型:点击控件后自动跳转
使用的场合:不需要任何的判断,直接跳到下一个界面 * 按住"control"直接从"控件"拖线到目标控制器
2> 手动型:需要手动写代码执行Segue
使用的场合:点击控件后,需要做一些判断,满足条件才会跳转 * 按住"control",从"源控制器"拖线到目标控制器 * Segue需要设置一个标识 * 使用perform方法执行对应identifier标识的segue // self是源控制器 [self performSegueWithIdentifier:@"login2contacts" sender:nil];
3.performSegueWithIdentifier:sender:的执行过程
1> 根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象,设置源控制器和目标控制器
2> 为跳转做准备
// 这个sender是performSegueWithIdentifier:sender:的sender - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
3> 调用Segue对象的- (void)perform;方法执行界面跳转
六、控制器数据的传递
1.顺传在源控制器的perpareForSegue:sender:方法中根据segue参数获得目标控制器,直接传递数据过去
2.逆传
源控制器成为目标控制器的
七、UITabBarController
UITabBarController控制器包含:UITabBar和UITabBarController的View,添加的viewController会覆盖掉这个View1.UITabBar
1> 如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件 2> UITabbarButton里面显示的内容由对应子控制器的tabBarItem属性决定
2.UITabBarItem的属性
@property(nonatomic,copy) NSString *title; @property(nonatomic,retain) UIImage *image; @property(nonatomic,retain) UIImage *selectedImage; // 提醒数字 @property(nonatomic,copy) NSString *badgeValue;
3.使用步骤:
代码实现
// 初始化tabbar控制器 UITabBarController *tabbarVc = [[UITabBarController alloc] init]; // 设置为window的跟控制器 self.window.rootViewController = tabbarVc; // 添加子控制器 UIViewController *vc1 = [[UIViewController alloc] init]; vc1.view.backgroundColor = [UIColor redColor]; vc1.tabBarItem.title = @"联系人"; vc1.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor"]; [tabbarVc addChildViewController:vc1];
补充:
// 设置字体的样式 - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;
例子:
NSMutableDictionary * textDict = [NSMutableDictionary dictionary]; textDict[NSForegroundColorAttributeName] = WBColor(123, 123, 123); [vc.tabBarItem setTitleTextAttributes:textDict forState:UIControlStateNormal]; // 控制器底部的tabBar隐藏 viewController.hidesBottomBarWhenPushed = YES;
storyboard实现
1> 添加跟控制器UITabBarController 2> 添加UINavigationController控制器 3> 右键TabbarController,添加view controller 4> 设置子控制器的UITabBarItem的属性
八、Modal
任何控制器都能通过Modal的形式展示,效果是新控制器从屏幕底部向上钻,直到覆盖原来的控制器// 以modal形式展示 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion // 关闭当初的modal出来的控制器 - (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
相关文章推荐
- 7、iOS 开发之程序启动原理
- 2、iOS 开发之字典转模型和 xib
- 1、iOS 开发之基础控件
- 【读书笔记】iOS-Xcode知识-多线程
- 【读书笔记】iOS-Xcode知识-多线程
- [iOS]把字符串汉字转换成UTF-8编码
- ios开发-电话本的设计与实现
- iOS 推送服务的简易原理与配置
- IOS学习 访问其他应用并交互
- IOS square类集成rectangl类 计算面积和周长
- iOS 大型项目开发漫谈
- iOS下nil 、NULL、 Nil 、NSNull的区别你造吗
- iOS动画技术——iOS 7自定义过渡动画
- 第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)
- IOS 调发短信和邮件界面
- nagios维护之常见问题
- iOS 多线程初学 - 多种方法创建多线程
- nagios维护之添加监控
- AutoLayout -Masonry
- iOS:制作九宫格