1.删除故事板中默认的视图控制器,和与之对应的.h.m文件
2.从对象库拖导航控制器对象到编辑器中(会好像加了两个场景)
3.添加两个类,第一个为UINavigationCOntroller子类关联到导航控制,第二个为UIViewCOntroller子类关联到根视图 和其他视图
(class是自己的命名,subclassof必须选择相应的父类)
4.关联完成后可以更改相应控制器的标签让其编程时更友好(这里的标签与底层的代码不关联)
5.导航控制器与视图控制器数据联系,
可在导航控制器.H中建立属性@property (nonatomic)int pushCount;
,在视图控制器的头文件中导入#import“CountingNAvigationController.H”(就是你命名的导航控制器)
在视图控制器类.M中访问方法
-(IBACTION)incrementCOunt:(id)sender{
((CountingNavigationController *)self..parentViewCOntroller).pushCount++; //属性parentViewController在导航控制器管理的场景中都自动设置为导航控制器对象
}
在视图控制器.M方法ViewWillAppear:animated中更新标签更好,因为可能在其他视图PUSH后返回原始场景
-(void)viewWillAppear:(BOOL)animated {
NSString *pushText;
pushText=[[NSString alloc] initWithFormat:@"%d",((CountingNavigationController *)self.parentViewController).pushCount];
self.countLabel.text=pushText;
}
导航控制器
1.删除原来的视图控制器和相应的类文件.H.M
2.从对象库中拉入TOOLBAR CONTROLLER
3.创建相应的类,UITabBarCOntroller子类与TOOLBARcontroller相连
viewcontroller子类与普通场景控制器相连
4.新添加场景时,将选项卡兰控制器与新场景控制器相连,类型选择releationship-viewControllers(选项卡兰控制器会自动新增切换)
5.规划变量
需跟踪3个不同计数器,countingtabbarCOntroller包含三个属性,分别为每个场景的计数器
viewcontroller包含两个属性,outputlabel指向一个标签显示三个计数器当前值,第二个为baritem连接到每个场景选项卡兰项
来更新其徽章值
因为有三个不同计数器,所以genericviewcontroller有三个操作方法,每个场景按钮触发针对该场景的方法(三个场景公用一个类控制)
还需两个方法updatecounts,updatebadge,更新当前计数器值,和徽章(这样不用在每个increment中重写相同代码)
6.在相应的视图中点击底部选项卡按钮,设置属性可以选择自定的选项卡图片,和相应的标题。(主选项卡控制器中相应的会自动变化)
7.创建输出口,outputlabel连接到每个场景
baritem连接到每个场景的选项卡
需要的操作
incrementcountfirst;连接到第一个场景按钮,更新第一个场景计数器,二三同样
由于count操作独立所以每个按钮都创建自己的操作
8.实现逻辑
在countingtabbarcontroller中添加3个属性
@property(nonatomic)int firstcount 。。。。二三同样
在相应的子视图控制器中导入文件#import“countingtabbarcontroller。h”
9.显示计数器
在.H中声明方法头文件
。M中实现
-(void)updateCounts {
NSString *countString;
countString=[[NSString alloc] initWithFormat:
@"First: %d\nSecond: %d\nThird: %d",
((CountingTabBarController *)self.parentViewController).firstCount,
((CountingTabBarController *)self.parentViewController).secondCount,
((CountingTabBarController *)self.parentViewController).thirdCount];
self.outputLabel.text=countString;
}
10.选项卡徽章值递增
在.H中声明方法原型
.M中实现
-(void)updateBadge {
NSString *badgeCount;
int currentBadge;
currentBadge=[self.barItem.badgeValue intValue]; //INTVALUE方法将badgevalue转换成整数,badgevalue可以读取选项卡的当前值
currentBadge++;
badgeCount=[[NSString alloc] initWithFormat:@"%d",
currentBadge];
self.barItem.badgeValue=badgeCount;
}
badgevalue是一个NSString不是整数所以修改他必须执行相应的转换
11.出发计数器更新
- (IBAction)incrementCountFirst:(id)sender {
((CountingTabBarController *)self.parentViewController).firstCount++;
[self updateBadge];
[self updateCounts];
}
二三同样
12记住要将相应属性取消
- (void)viewDidUnload
{
[self setOutputLabel:nil];
[self setBarItem:nil]; //setBarItem 中B会自动变成大写的
[super viewDidUnload];
}
13,记住在viewwillappear中更新
【self.updatecounts】