[课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)
2013-12-12 15:50
489 查看
陈述:我们在使用tabbarController的时候,我们总会和NavagationController联合起来。但是不联合的时候又是什么样的一种pool的情况呢?我们就单单的 TabBarController 来进行介绍。最后复习一下两个空间结合起来达成的完美效果
、、-----------------单独的TabbarController的使用
1.我们先使用TabbarController 来进行view的创建
由于h文件中没什么内容,我们就直接跳转到代理的实现文件吧
可以看得出,我们把两个VC文件封装成了一个 Array的组,然后放到 UITabBarController的viewControllers下。这样子来说,我们的两个视图就做好了,我们运行之后,可能会发现我们的APP 竟然是空白一片。好了,我忘记说了,我们可以设置一些标志。button什么的都是temp的。
那么我们如何设置我们的item名字为 一个有意义的名字呢 ?
2.看看我们的firstViewController的init,你就明白了
你可能会惊讶,我们的h m文件中都没有 tabbarItem,但是为什么self之后就能出现呢?
因为这是apple因为为我们封装好的框架,但是我们没有使用的时候,是hidden的。有的时候,必须设置成 no才可以的。
如果你把我注释的 self.title = @“first”去掉注释,然后去掉 下面的那句,那你就会发现, 我们的item的名称就会变化。这是为什么么?self.title有什么牛逼的作用?我们在导航介绍完之后就会告诉大家。别着急哦
//导航控制器和 TabBarController的综合使用
3.现在我们就修改一下,delegate.m中的一些代码,来实现综合使用吧
其实很简单,我们只是修改了 我们的数组里面的 vc的属性,从原来的 vc到现在的nvc(NavigationVC)。这一下子,我们就让一个vc有了导航栏的属性。
来,看看效果吧
4.看完之后,你也许就会问,1.2的差别好大呢,差别到底在哪里呢?
我们来看看 1.2m的init方法吧,对比才有好坏~
1.m
2.m
看到2的时候,你觉得 为什么设置了title,却没有显示呢 ?
就此问题,我试验了四次,终于明白了
1)只设置一项,是不出现的。上述代码已验证
2)设置导航的title,只出现了导航的title。
3).设置成 self.title,都出现。
4).tabbarItem.title和image一同设置,全部出现。
5).如果我们设置了self.title,再次设置self.tabbaritem.title,就会发现两者可以不一样了。
3.现在就我觉得需要声明的几点总结一下:
i:你写代码加入image的时候,你会发现我们的image都是像图示的 蓝色方框,并不是我们需要的图片,这是因为tabbarItem需要的是一个没有背景的图片,而我们加入的却是有背景的。
ii:一般情况下,不要仅仅使用self.tabBarItem.title= @“XXX”,因为我们会发现这行代码是不起作用的 ,要不我加入 image,要不我们再加入 self.title,这样子我们设置的显示才能成功。
iii:关于提示消息的提示、更新提醒.
IV:应用更新提醒
、、-----------------单独的TabbarController的使用
1.我们先使用TabbarController 来进行view的创建
由于h文件中没什么内容,我们就直接跳转到代理的实现文件吧
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; LCFirstViewController *firstVC = [[LCFirstViewController alloc]init]; LCSecondViewController *secondVC = [[LCSecondViewController alloc]init]; NSArray *array = [NSArray arrayWithObjects:firstVC,secondVC, nil]; UITabBarController *tabBarVC = [[UITabBarController alloc]init]; tabBarVC.viewControllers = array; [self.window setRootViewController:tabBarVC]; [self.window makeKeyAndVisible]; return YES; }
可以看得出,我们把两个VC文件封装成了一个 Array的组,然后放到 UITabBarController的viewControllers下。这样子来说,我们的两个视图就做好了,我们运行之后,可能会发现我们的APP 竟然是空白一片。好了,我忘记说了,我们可以设置一些标志。button什么的都是temp的。
那么我们如何设置我们的item名字为 一个有意义的名字呢 ?
2.看看我们的firstViewController的init,你就明白了
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // self.title = @"first"; self.tabBarItem.title = @"firstView"; self.tabBarItem.image = [UIImage imageNamed:@"1.png"]; } return self; }
你可能会惊讶,我们的h m文件中都没有 tabbarItem,但是为什么self之后就能出现呢?
因为这是apple因为为我们封装好的框架,但是我们没有使用的时候,是hidden的。有的时候,必须设置成 no才可以的。
如果你把我注释的 self.title = @“first”去掉注释,然后去掉 下面的那句,那你就会发现, 我们的item的名称就会变化。这是为什么么?self.title有什么牛逼的作用?我们在导航介绍完之后就会告诉大家。别着急哦
//导航控制器和 TabBarController的综合使用
3.现在我们就修改一下,delegate.m中的一些代码,来实现综合使用吧
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; LCFirstViewController *firstVC = [[LCFirstViewController alloc]init]; LCSecondViewController *secondVC = [[LCSecondViewController alloc]init]; UINavigationController *navFirstVC = [[UINavigationController alloc]initWithRootViewController:firstVC]; UINavigationController *navSecondVC = [[UINavigationController alloc]initWithRootViewController:secondVC]; NSArray *array = [NSArray arrayWithObjects:navFirstVC,navSecondVC, nil]; UITabBarController *tabBarVC = [[UITabBarController alloc]init]; tabBarVC.viewControllers = array; [self.window setRootViewController:tabBarVC]; [self.window makeKeyAndVisible]; return YES; }
其实很简单,我们只是修改了 我们的数组里面的 vc的属性,从原来的 vc到现在的nvc(NavigationVC)。这一下子,我们就让一个vc有了导航栏的属性。
来,看看效果吧
4.看完之后,你也许就会问,1.2的差别好大呢,差别到底在哪里呢?
我们来看看 1.2m的init方法吧,对比才有好坏~
1.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = @"first"; self.tabBarItem.title = @"firstView"; self.tabBarItem.image = [UIImage imageNamed:@"1.png"]; } return self; }
2.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.tabBarItem.title = @"secondView"; // Custom initialization } return self; }
看到2的时候,你觉得 为什么设置了title,却没有显示呢 ?
就此问题,我试验了四次,终于明白了
1)只设置一项,是不出现的。上述代码已验证
2)设置导航的title,只出现了导航的title。
3).设置成 self.title,都出现。
4).tabbarItem.title和image一同设置,全部出现。
5).如果我们设置了self.title,再次设置self.tabbaritem.title,就会发现两者可以不一样了。
3.现在就我觉得需要声明的几点总结一下:
i:你写代码加入image的时候,你会发现我们的image都是像图示的 蓝色方框,并不是我们需要的图片,这是因为tabbarItem需要的是一个没有背景的图片,而我们加入的却是有背景的。
ii:一般情况下,不要仅仅使用self.tabBarItem.title= @“XXX”,因为我们会发现这行代码是不起作用的 ,要不我加入 image,要不我们再加入 self.title,这样子我们设置的显示才能成功。
iii:关于提示消息的提示、更新提醒.
IV:应用更新提醒
相关文章推荐
- oschina-app源码分析-提醒标签BadgeView使用逻辑流程
- React-Native-Remote-Update - 使用React-Native实现app热更新的一次实践
- 【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 - 大V综合交流区 360论坛
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 使用cordova-app-loader热更新cordova项目
- [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,
- oschina-app源码分析-提醒标签BadgeView使用方法
- oschina-app源码分析-提醒标签BadgeView使用逻辑流程
- 关于android 消息提醒,在网上找到这个项目在eslipse中使用ValueAnimator报错
- 项目实践——消息队列de使用
- 项目综合管理:CMMI和敏捷实践分析
- App更新策略课程-实现通知栏进度更新&消息提醒
- 使用IntentService解决点我达骑手APP消息提醒机制中的优先级排序问题
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- 索引原理及项目中如何使用索引实例分析
- 项目实践中--Git服务器的搭建与使用指南
- JavaWeb企业实训 简易股市自选查询分析系统(六)使用Shiro控制登录等权限管理与Spring项目整合
- iOS—ViewController的生命周期分析和使用
- Android项目-智慧北京:02(三种技术设计主页面及源码分析点击事件传递的机制及Json数据传递的使用)
- 【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价