美文网首页
UINavigationController导航控制器

UINavigationController导航控制器

作者: 李琪_59dc | 来源:发表于2017-10-17 14:19 被阅读0次

    导航控制器基础使用

    屏幕快照 2017-10-17 14.20.13.png
    • AppDelegate.m
    #import "AppDelegate.h"
    #import "VCRoot.h"
    //应用程序初始化完成后调用此函数
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
        //创建一个视图控制器
        VCRoot *root = [[VCRoot alloc]init];
        //创建一个导航视图控制器
        //主要用来管理多个视图控制器的切换
        //必须有根视图控制器
        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:root];
        //将window的**根视图**设置为导航控制器
        self.window.rootViewController = nav;
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    • VCRoot.m
      title设置导航栏的标题
      navigationItem.title设置导航元素项的标题
      navigationItem.leftBarButtonItem设置导航栏左侧的按钮
      navigationItem.rightBarButtonItem设置导航栏右侧的按钮
      navigationItem.rightBarButtonItems在导航栏右侧设置多个按钮(利用按钮数组)
    @implementation VCRoot
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor cyanColor];
        //设置导航栏的标题
        self.title = @"这是标题";
        //设置导航元素项的标题
        //如果没有设置,系统会自动使用self.title
        self.navigationItem.title = @"这也是标题";
        
        //创建一个导航栏左侧的按钮
        //视图title文字
        UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"leftbar" style:UIBarButtonItemStyleDone target:self action:@selector(pressLeft)];
        self.navigationItem.leftBarButtonItem = leftButton;
        //根据系统风格来创建按钮
        //只需要指定风格样式,系统风格的按钮内容或标题文字不能改
        UIBarButtonItem *rightButton =[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pressRight)];
        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 50, 40)];
        //    self.navigationItem.rightBarButtonItem = rightButton;
        label.text = @"test";
        label.textAlignment = NSTextAlignmentCenter;
        
        //将任何类型的控件添加到导航按钮的方法
        UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithCustomView:label];
        NSArray *arrayBtn = [NSArray arrayWithObjects:rightButton,item, nil];
        //将右侧按钮组添加到导航栏
        self.navigationItem.rightBarButtonItems = arrayBtn;
    }
    -(void)pressLeft{
        NSLog(@"press left button ");
    }
    -(void)pressRight{
        NSLog(@"press right button");
    }
    

    导航控制器切换

    • AppDelegate.m中的内容不变
    • 新建VCRoot VCSecond VCThird 三个继承UIViewController的视图控制器
    • navigationController的 pushViewController方法,切换到下一个视图控制器
    //VCRoot.m
    #import "VCSecond.h"
    - (void)viewDidLoad {
        [super viewDidLoad];
        //设置导航栏透明度
        self.navigationController.navigationBar.translucent = NO;
        self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
        self.view.backgroundColor = [UIColor cyanColor];
        
        self.title = @"根视图";
        UIBarButtonItem *next = [[UIBarButtonItem alloc]initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(pressNext)];
        self.navigationItem.rightBarButtonItem = next;
    }
    -(void)pressNext{
        VCSencod *vcSecond = [[VCSencod alloc]init];
        //使用当前视图控制器的导航控制器对象
        [self.navigationController pushViewController:vcSecond animated:YES];
    }
    
    //VCSecond.m
    #import "VCSecond.h"
    #import "VCThird.h"
    @interface VCSencod ()
    @end
    
    @implementation VCSencod
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor greenColor];
        self.title = @"视图二";
        UIBarButtonItem *btnNext = [[UIBarButtonItem alloc]initWithTitle:@"第三级" style:UIBarButtonItemStylePlain target:self action:@selector(pressNext)];
        self.navigationItem.rightBarButtonItem = btnNext;
    }
    -(void)pressNext{
        VCThird *vc = [[VCThird alloc]init];
        //切换到视图控制器三
        [self.navigationController pushViewController:vc animated:YES];
    }
    
    • popViewControllerAnimated 切换回到上一个视图控制器
    • popToRootViewControllerAnimated 直接跳转到根视图控制器
    //VCThird.m
    #import "VCThird.h"
    #import "VCSecond.h"
    @interface VCThird ()
    @end
    
    @implementation VCThird
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor orangeColor];
        self.title = @"第三级";
        
        UIBarButtonItem *btnLeft = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(pressBack)];
        self.navigationItem.leftBarButtonItem = btnLeft;
        
        UIBarButtonItem *btnR = [[UIBarButtonItem alloc]initWithTitle:@"返回根视图" style:UIBarButtonItemStylePlain target:self action:@selector(pressRight)];
        self.navigationItem.rightBarButtonItem = btnR;
    }
    -(void)pressRight{
        //直接返回到根视图
        [self.navigationController popToRootViewControllerAnimated:YES];
    }
    -(void)pressBack{
        //返回上一级
        [self.navigationController popViewControllerAnimated:YES];
        NSLog(@"返回上一级");
    }
    

    相关文章

      网友评论

          本文标题:UINavigationController导航控制器

          本文链接:https://www.haomeiwen.com/subject/xwtduxtx.html