ios入门笔记(导航控制器)

时间:2021-08-10 20:41:31

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】