UI:导航控制器UINavigationController的使用

一、多控制器

一个iOS的app很少只由一个控制器组成,除非这个app极其简单。当app中有多个控制器的时候,我们就需要对这些控制器进行管理

有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器

比如,用一个控制器A去管理3个控制器B、C、D。控制器A被称为控制器B、C、D的“父控制器”;控制器B、C、D的被称为控制器A的“子控制器”

为了便于管理控制器,iOS提供了2个比较特殊的控制器

UINavigationController

UITabBarController

二、导航控制器

利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换

/*

导航控制器是一种头尾数的视图结构控制器

创建导航控制器必须有一个根视图控制器添加到导航控制器上

导航自带两个工具条: 1.导航条,默认显示

2.工具条,默认隐藏

*/

三、UINavigationController的使用步骤

(1)初始化UINavigationController

(2)设置UIWindow的rootViewController为UINavigationController

(3)根据具体情况,通过push方法添加对应个数的子控制器

1.标签导航代码

AppDelegate中

ViewController *yellowView = [[ViewController alloc] init];
    RedViewController *redView = [[RedViewController alloc] init];
    BlueViewController *blueView = [[BlueViewController alloc] init];
    GreenViewController *greenView = [[GreenViewController alloc] init];

    yellowView.tabBarItem.title = @"Yellow";
    blueView.tabBarItem.title = @"Blue";
    greenView.tabBarItem.title = @"Green";

    //创建导航控制器
    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:redView];
    redView.navigationItem.title = @"导航首页";
    redView.tabBarItem.title = @"Red";
    navigation.tabBarItem.title = @"dao";

    //创建标签栏控制器
    UITabBarController *tabBarController = [[UITabBarController alloc] init];

    //把创建好的界面加到标签栏控制器里面
    [tabBarController setViewControllers:@[yellowView,navigation,blueView,greenView] animated:YES];

    //把导航控制器设置为要显示的窗口的根视图
    self.window.rootViewController = tabBarController;

2.自定义标签栏

新建文件  UITabBarController类

_tempAry = [NSMutableArray array];

    ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];
    ViewControllerTwo *vc2 = [[ViewControllerTwo alloc] init];
    ViewControllerThree *vc3 = [[ViewControllerThree alloc] init];
    ViewControllerFour *vc4 = [[ViewControllerFour alloc] init];

    self.viewControllers = @[vc1,vc2,vc3,vc4];
    //隐藏自带的标签栏
    self.tabBar.hidden = YES;
    //自定义标签背景
    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.image = [UIImage imageNamed:@"[email protected]"];
    imageView.frame = CGRectMake(0, self.view.frame.size.height-49, 320, 49);
    [self.view addSubview:imageView];

    //开启imageView与用户交互的权限
    imageView.userInteractionEnabled = YES;

    //添加标签栏上的按钮
    float gap = (320 - 4*30)/5;
    for (int i = 0; i < 4; i++) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.tag = i+11;
        btn.frame = CGRectMake(gap+(gap+30)*i, (49-30)/2, 30, 30);

        //设置按钮默认、选中时候的图片
        UIImage *imageNormal = [UIImage imageNamed:[NSString stringWithFormat:@"tabBtn%i_1.png",i+1]];
        UIImage *selected = [UIImage imageNamed:[NSString stringWithFormat:@"tabBtn%i_2.png",i+1]];
        [btn setImage:imageNormal forState:UIControlStateNormal];
        [btn setImage:selected forState:UIControlStateSelected];

        [imageView addSubview:btn];
        [_tempAry addObject:btn];
        //设置按钮选中状态
        if (btn.tag == 11) {
            btn.selected = YES;
            self.selectedIndex = 0;
        }
        //点击按钮,进入点击方法
        [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
    }
-(void)clickBtn:(UIButton *)sender{
    for (UIButton *nowBtn in _tempAry) {

        nowBtn.selected = nowBtn.tag == sender.tag ? YES : NO;

//        if (nowBtn.tag == sender.tag) {
//            sender.selected = YES;
//        }else{
//            nowBtn.selected = NO;
//        }
    }

    int index = sender.tag - 11;
    self.selectedIndex = index;
}

只要当前控制器是导航控制器的子控制器,那么就可以通过self.navigationController属性直接获取到当前控制器所在的导航控制器

时间: 2024-10-10 06:59:41

UI:导航控制器UINavigationController的使用的相关文章

iOS开发UINavigation系列四——导航控制器UINavigationController

iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便.前几篇博客地址如下: UINavigationBar:http://my.oschina

ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a

参考:StackOverflow ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a.在b跳转(push)到c中代码书写如下: UINavigationController *navController = [[self.navigationController retain] autorelease]; [navController popViewControllerAnimated:NO]; View

UIKit框架(11)导航控制器UINavigationController

介绍多控制器管理中非常重要的一个控制器UINavigationController 它负责管理多个控制器,能够轻松完成控制器间的切换 如:iOS系统上的设置 父类是UIViewController,但其功能并非是管理view,而是管理多个控制器 控制器栈式管理: 当切换时,将一个控制器入栈,当返回时,栈顶控制器出栈 当前显示的永远是栈顶控制器的view,栈结构如下: @property(nonatomic, copy) NSArray *viewControllers  //管理的所有控制器  

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

导航控制器UINavigationController

(一)导航控制器:严格来说,导航控制器并不是视图控制器,只是一个专门来管理ViewController的容器类.采用堆栈的设计模式,先进后出,后进先出.push就是压栈,pop就是弹栈. (二)导航栏:UINavigationBar:就是导航控制器上面那一栏. // 设置导航栏的背景颜色 navigationController?.navigationBar.barTintColor = UIColor.orangeColor() // 设置导航栏的背景图片 参数3是设置横竖屏 navigati

iOS开发UI篇—导航控制器属性和基本使用

IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController *nav=[[UINavigationControlleralloc]init]; 2.设置导航控制器为window的根视图 self.window.rootViewController=nav; 3.添加 YYOneViewController  *one = [[YYOneViewContro

IOS开发UI篇—导航控制器属性和基本使用 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3768622.html IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) UINavigationController *nav=[[ UINavigationController alloc ] init ]; 2.设置导航控制器为window的根视图 self . window . rootViewController =nav

IOS UINavigationController 导航控制器

/** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 2.zhan (zhan 中所有的子控制器) self.navigationController.viewControllers; 3.将控制器压入zhan 中 [self.navigationController pushView

导航控制器属性和基本使用

IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController *nav=[[UINavigationControlleralloc]init]; 2.设置导航控制器为window的根视图 self.window.rootViewController=nav; 3.添加 YYOneViewController  *one = [[YYOneViewContro