• UINavigationController


    ⼀、UINavigationController
     
    • UINavigationController:导航控制器,是iOS中最常⽤的多视图 控制器之⼀,⽤它来管理多个视图控制器。 
    • 导航控制器可以称为是,管理控制器的控制器,主要管理有层 次递进关系的控制器。
    • UINavigationController继承于UIViewController,以栈的⽅式管 理所控制的视图控制器,⾄少要有⼀个被管理的视图控制器, 这个控制器我们称作,导航控制器的根视图控制器。
    • 任何继承⾃UIViewController的类(多态)都可以作为根控制器。
     
    //导航视图控制器也是一个视图控制器,TA管理了多个子视图控制器,是系统提供给我们的容器视图控制器
        //导航视图控制器至少管理了一个子视图控制器,这个视图控制器称为导航视图控制器的根视图控制器
        //如果我们的程序想要采用导航视图控制器进行布局,我们需要指定window的根视图控制器为导航视图控制器
     
    // 创建根视图器的根视图控制器
        RootViewController *rootVC = [[RootViewController alloc] init];
        // 创建导航控制器 把rootVC作为导航控制
        UINavigationController *naVC = [[UINavigationController alloc] initWithRootViewController:rootVC];
        //设置导航栏的显隐属性
    //    naVC.navigationBarHidden = YES;
     
        //设置导航栏样式
        naVC.navigationBar.barStyle = UIBarStyleDefault;
       
        //设置导航条的背景颜色
        naVC.navigationBar.backgroundColor = [UIColor lightGrayColor];
       
        //设置导航栏颜色
        naVC.navigationBar.barTintColor = [UIColor lightGrayColor];
       
        //设置导航栏元素颜色
        naVC.navigationBar.tintColor = [UIColor cyanColor];
        // 设置导航为window的根视图
        self.window.rootViewController = naVC;
        // 内存管理
        [naVC release];
        [rootVC release];
     
    ⼆、UINavigationBar
     
    • UINavigationBar(导航栏)上的设置主要分两部分,⼀为导航栏上的 各种导航部件(UINavigationItem),⼆为导航栏⾃⾝的相关设置。 
    • navigationBar—导航条,iOS7之后默认是半透明的,iOS7之前默认 是不透明的。 
    • navigationBar竖屏下默认⾼度44,横屏下默认⾼度32。 
    • iOS7之后,navigationBar的背景会延伸到statusBar上。导航栏⾼ 度仍保持44,但显⽰效果为64。
    • 每个视图控制器都有⼀个navigationItem属性。navigationItem中 设置的左按钮、右按钮、标题等,会随着控制器的显⽰,也显⽰ 到navigationBar上。
     
    self.view.backgroundColor = [UIColor whiteColor];
       
        //每一个加到导航视图控制器内部的视图控制器自带一个属性叫navigationItem,可以配置当前页面导航条的显示内容,比如左、右按钮,标题等
        self.navigationItem.title = @"中二洪荒";
     
    //创建左按钮
         //1 显示标题
        UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithTitle:@"巴达" style:UIBarButtonItemStylePlain target:self action:@selector(leftAction)];
       
         //2 使用系统自带图标样式
        UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(leftAction)];
       
        // 3 使用自定义图片显示
        UIImage *image = [UIImage imageNamed:@"dianhua"];
       
        UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(leftAction)];

        //指定左按钮
        self.navigationItem.leftBarButtonItem = left;
       
        // 4 使用自定义视图显示
        UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
       
        UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithCustomView:mySwitch];
        self.navigationItem.leftBarButtonItem = left;
       
        [mySwitch release];
        [left release];
       
        //设置左、右按钮显示多个
        UIBarButtonItem *first = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add)];
        UIBarButtonItem *second = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookmark)];
        self.navigationItem.rightBarButtonItems = @[first, second];
        [first release];
        [second release];
    ``````````````````````````````````````````````````````````````````
    //设置导航条上的标题视图
        UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:@[@"中二洪荒", @"洪荒中二"]];
        seg.selectedSegmentIndex = 0;
    //    seg.momentary = YES;
        self.navigationItem.titleView = seg;
        [seg release];
     
    // 导航栏半透明效果(iOS7以后 默认为YES)
        // 当半透明效果开启时 屏幕左上角为坐标原点
        // 关闭时 导航栏左下角为坐标原点
        self.navigationController.navigationBar.translucent = NO;
     
    ```````````````````````````````````````````````````````````````````````
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(125, 100, 100, 100)];
        view.tag = 101;
        view.backgroundColor = [UIColor blackColor];
        [self.view addSubview:view];
        [view release];
       
        UIStepper *stepper = [[UIStepper alloc] initWithFrame:CGRectMake(100, 300, 100, 40)];
        stepper.minimumValue = 1;
        stepper.maximumValue = 5;
        stepper.stepValue = 1;
        [stepper addTarget:self action:@selector(step:) forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:stepper];
        [stepper release];
     
     
    - (void)step:(UIStepper *)stepper {
        UIView *view = [self.view viewWithTag:101];
        view.bounds = CGRectMake(0, 0, 100 + 50 * stepper.value, 100 + 50 * stepper.value);
    }
     
    三、页⾯跳转
     
    • UINavigationController通过栈的⽅式管理控制器的切换,控制⼊栈和出栈 来展⽰各个视图控制器。 
    • UINavigationController的ContentView⾥始终显⽰栈顶控制器的view. 
    • viewControllers属性是⼀个可变数组(NSMutableArray)存储了栈中的所有 被管理的控制器,⼊栈的时候,使⽤addObject把新的视图控制器对象添加 到数组末尾,出栈时removeLastObject移除数组末尾的试图控制器对象。 
    • navigationController属性,⽗类中的属性,每个在栈中的控制器,都能通 过此属性,获取⾃⼰所在的UINavigationController对象。
     
    常用属性:
    //点击按钮实现推出视图控制器的操作
    - (void)push {
        //1、创建想要跳转到的视图控制器
        SecondViewController *secondVC = [[SecondViewController alloc] init];
       
        //2、导航视图控制器完成推出操作
        [self.navigationController pushViewController:secondVC animated:YES];
       
        //3、释放
        [secondVC release];
    }
     
    //点击返回按钮返回到某一级视图控制器
    - (void)back {
        //1、返回到上一级视图控制器
    //    [self.navigationController popViewControllerAnimated:YES];
       
        //2、返回根视图控制器
        /*
        [self.navigationController popToRootViewControllerAnimated:YES];*/
       
        //3、返回到指定的视图控制器
        UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:1];
       
        [self.navigationController popToViewController:vc animated:YES];
    }
     
    四、模态
     
    - (void)next
    {
        // ⻚⾯跳转
        // 模态(modal)
        // 1.创建第⼆⻚对象
        SecondViewController *secVC = [[SecondViewController alloc] init];
        // 2.设置过渡动画(有默认值, 可以不设置)
        secVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        // 3.模态控制器
        // 参数1: 第⼆⻚对象
        // 参数2: 是否使⽤动画
        // 参数3: 模态完成后执⾏的block
        [self presentViewController:secVC animated:YES completion:^{
           
        }];
        // 4.内存管理
        [secVC release];
    }
     
    - (void)back
    {
        // 模态返回上⼀⻚
        // 参数1: 是否动画
        // 参数2: 返回完成后执⾏的block
        [self dismissViewControllerAnimated:YES completion:^{
           
        }];
    }
  • 相关阅读:
    Callable、Future和FutureTask使用说明
    WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】
    jvm内存模型及分配参数
    CyclicBarrier 使用说明
    【LOJ6515】贪玩蓝月
    【LOJ6482】LJJ 爱数数 数论
    【CF1063F】String Journey 哈希
    【CF1063D】Candies for Children 数学
    【XSY2851】蛋糕 数学
    2018百度之星大赛游记
  • 原文地址:https://www.cnblogs.com/Walking-Jin/p/5210874.html
Copyright © 2020-2023  润新知