UINavigationController导航控制器
2017-10-17 本文已影响0人
李琪_59dc
导航控制器基础使用
屏幕快照 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(@"返回上一级");
}