zoukankan      html  css  js  c++  java
  • ios入门笔记(导航控制器)

    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 Second: %d Third: %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】

  • 相关阅读:
    centos7 安装mysql
    Nginx安装及配置详解
    nginx安装
    JSON Web Token
    优先队列
    小程序遮罩层禁止页面滚动(遮罩层内部可以滚动)
    H5中接入微信支付
    如何使用less预编译
    在methods中使用filter
    根据当前时间获取上一个月的时间
  • 原文地址:https://www.cnblogs.com/Ponytai1/p/6090285.html
Copyright © 2011-2022 走看看