陈述:我们在使用tabbarController的时候,我们总会和NavagationController联合起来。但是不联合的时候又是什么样的一种pool的情况呢?我们就单单的 TabBarController  来进行介绍。最后复习一下两个空间结合起来达成的完美效果

、、-----------------单独的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:应用更新提醒

[课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)的更多相关文章

  1. [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,

    经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习. 我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用 1.首先我们看看我们建立的use ...

  2. [课堂实践与项目]IOS优先级的计算器

    这个计算器主要是使用数组进行实现的.虽然没有使用前缀后缀表达式,但是是一种方法o. .h文件 // // LCViewController.h // 具有优先级的calculator // // Cr ...

  3. [课堂实践与项目]IOS只能进行简单的加减乘除的没有优先级的计算器

    // // LCViewController.m // calculator // // Created by lichan on 13-12-3. // Copyright (c) 2013年 co ...

  4. 2016-2017-2 《Java 程序设计》课堂实践项目

    目录 基本工具 基础内容 Hello World 和 模块分解 数组的使用 命令行参数 递归 分支语句 String类的使用 类的定义与测试 多态 IO与异常 数据库 网络与安全 数据结构应用 And ...

  5. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  6. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  7. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  8. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  9. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

随机推荐

  1. centos下彻底删除MYSQL 和重新安装MYSQL

    在Centos6.3上装了一个Mysql,结果mysql库被我玩丢了(这里面管理了mysql的权限).现在采用先彻底删除,然后重新安装Mysql. 1 删除Mysql yum remove  mysq ...

  2. opencv是什么

    OpenCV是一个用于图像处理.分析.机器视觉方面的开源函数库.       不管你是做科学研究,还是商业应用,opencv都能够作为你理想的工具库,由于,对于这两者,它全然是免费的.该库採用C及C+ ...

  3. cocos2d-x的A*寻路

    如果你还不熟悉A*寻路,请先看下这篇文章http://blog.csdn.net/dssdss123/article/details/11494065 一.先介绍几个函数和结构: 1.virtual ...

  4. Cocos2dx项目移植Android平台

    链接地址:http://blog.csdn.net/iuncle/article/details/24772183 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.Classes目录下存放. ...

  5. POJ 2187 旋转卡壳 + 水平序 Graham 扫描算法 + 运算符重载

    水平序 Graham 扫描算法: 计算二维凸包的时候可以用到,Graham 扫描算法有水平序和极角序两种. 极角序算法能一次确定整个凸包, 但是计算极角需要用到三角函数,速度较慢,精度较差,特殊情况较 ...

  6. Python函数式编程:内置函数reduce 使用说明

    一.概述 reduce操作是函数式编程中的重要技术之一,其作用是通过对一个集合的操作,可以从中生成一个值.比如最常见的求和,求最大值.最小值等都是reduce操作的典型例子.python通过内置red ...

  7. java计算两个日期相差多少天

    java计算两个日期相差多少天 public class DateUtil{ public static int betweenDays(Date startDate, Date endDate ) ...

  8. [产值分析]生产部KPI考核之产值分析

    接到新任务:设计统计电子和磁电公司生产部产值分析报表. 眼下状况: 1.电子公司:取最新单位价格*入库数量 2.磁电公司:取最低价格*入库数量(实际取价的时候又没有取到最低价) 假设计算出来的结果和財 ...

  9. jQuery Mobile 入门基础教程

    jQuery Mobile是jQuery在手机上和平板设备上的版本.jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架. jQue ...

  10. C++ 中mallon动态分配内存大小用法

    #include<iostream> using namespace std; int main(){ char *s; int n; cin>>n; s= (char *) ...