您的位置:首页 > 产品设计 > UI/UE

IOS--UI--LessonNavigationController

2015-07-10 21:27 495 查看
定义:

/*

1.UINavigationController 继承自 UIViewController 可以管理视图 (导航控制器)是 IOS 中提供的 用来管理多个视图控制器的控制器,被他管理的试图控制器必须要有层级关系(依赖关系,下一个视图出现必须依赖上一个出现过的视图)

2.要进入下一界面 先导入头文件 然后在创建下一个界面的视图控制器 push 进入

返回上一级界面 pop 返回

3.导航控制器以栈的形式管理多个视图控制器, push时 视图控制器入栈, pop 时 视图控制器出栈 (即 被销毁),屏幕上永远显示的是栈定元素

4.viewControllers 属性: 永远是获得当前

*/

准备 工作 修改根视图控制器 将导航控制器指定为根视图控制器

//设置好一个视图 让导航控制器控制
FirstViewController *firstVC = [[FirstViewController alloc]init];
self.window .rootViewController = firstVC;

//将导航控制器 指定为 window 的根视图控制器
UINavigationController *rootNC = [[UINavigationController alloc]initWithRootViewController:firstVC];
//    2.设置window 的根视图控制器
self.window .rootViewController = rootNC;
[rootNC release];
[firstVC release];

上面这些代码可以封装起来 下次使用的时候就会方便甚多 只要传值就够了


注:因为Navigation 是多视图控制器 我们至少建立两个以上的文件

1.导航功能的实现

建立 第一个视图 FirstViewController

.m 中 我们先建立一个简单的 Button 让他通过点击事件转入第二个界面即 SecondViewController

FirstViewController.m
注://为了让代码好看 我们不在- (void)viewDidLoad ;中写我们代码 写在外面 然后在这个代码进程中引入
- (void)viewDidLoad {
[super viewDidLoad];

//加背景颜色 为了防止卡顿现象
self.view.backgroundColor= [UIColor redColor];
//要记得在里面调用
[self layoutPushButton];
[self configureCommonProperty];
[self customNavicationBarConten];

}
// 点击进入下一界面 为了清晰明了 我们设方法名为 Push+xxx
-(void)layoutPushButton{
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(50, 150, 220, 40);
[button setTitle:@"下一步" forState:UIControlStateNormal];
button.backgroundColor = [UIColor whiteColor];
[button addTarget:self action:@selector(handlePush:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

}
-(void)handlePush:(UIButton *)sender{
//进入下一个视图的步骤
//    1.创建第二个视图 并引入 这个地方要在 F 的 点. m中引入第二个视图的头文件
//你想下一页显示谁 你就创建那个视图 导入头文件 在 controller 里面写谁
SecondViewController *secondVC= [[SecondViewController alloc]init];
//    2.通过导航控制器进入下一个界面
//得到自身坐在的多视图控制器(UINavigationController)
[self.navigationController pushViewController:secondVC  animated:YES];
[secondVC release];
}


2.创建要进入的第二个界面 cmd+n

SecondViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
//加背景颜色 为了防止卡顿现象
self.view.backgroundColor = [UIColor yellowColor];
[self layoutPushButton];
[self layoutPopButton];

}
//进入下一个界面的 Button
-(void)layoutPushButton{
//1.创建对象
UIButton *pushButton = [UIButton buttonWithType:UIButtonTypeSystem]; //2.设置属性
pushButton.frame = CGRectMake(30, 150, 100, 30);
[pushButton setTitle:@"NEXT" forState: UIControlStateNormal];
pushButton.backgroundColor = [UIColor whiteColor];
//3.Push 的点击事件
[pushButton addTarget:self action:@selector(handlePush:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:pushButton];

}
//点击事件的方法
-(void)handlePush:(UIButton *)sender{
//进入下一个视图的步骤
//    1.创建第二个视图 并引入 这个地方要在 S 的. m中引入第三个视图的头文件
ThreeViewController *three = [[ThreeViewController alloc]init];
//获得根视图控制器(导航控制器)
[self.navigationController pushViewController:three animated:YES];
[three release];
}

//如果你就想着两个 我们可以设一个返回上一界面的 button
-(void)layoutPopButton{
//创建对象
UIButton *popButton = [UIButton buttonWithType:UIButtonTypeSystem];
//配置属性
popButton.frame = CGRectMake(150, 150, 100, 30);
[popButton setTitle:@"back on" forState:UIControlStateNormal];
//点击事件
[popButton addTarget:self action:@selector(handlePop:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:popButton];
}

-(void)handlePop:(UIButton *)sender{
//1.获得多视图控制器(导航控制器)     //返回上一级页面
[self.navigationController popViewControllerAnimated:YES];
//    //2.返回主界面
[self.navigationController popToRootViewControllerAnimated:YES];
//    //3.返回指定界面
[self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES];
}
//注意:新手錯誤 :新建自己想去的页面的对象 这时候你建立的就和之前堆栈里的不是一个地方 他们只是同一个类而已


导航总结:

/*

1.要在使用的视图中加上底色 防止卡顿

2.Push 是进入 pop 是返回

3.pop 的方法里面有三种返回到界面的方法 选择自己想要的就可以了

*/

2.UINavigationBar 的导航栏自定义

定义:和控制器一样是个容器 显示提供的其他对象的内容 通过 UINavigationItem 展示 每个 controller 都会有专属的 Item

设立公有的属性
// 在 APPDelegate 里面 设置的 bar 的颜色 就会应用于所有视图
rootNC.navigationBar .tintColor = [UIColor cyanColor];
//外观
rootNC.navigationBar.barStyle = UIBarStyleBlack;
//透明度
rootNC.navigationBar.translucent = YES;
//添加图片  default 竖屏 lanxxx 是横屏
rootNC.navigationBar setBackgroundImage:[UIImage imageNamed:图片名字] forBarMetrics:UIBarMetricsDefault];


2.1 UINavigationItem 是 Bar 要显示的内容, Bar 是唯一的,每一个 controller 都要设置

常用属性: leftBarButtonItem / rightBarButtonItem /backBarButtonItem /title /titleView;

注意 :①leftBarButtonItem 虽然能点击 不是 button

①backBarButtonItem 是上一级的UINavigationItem控制



在FirstViewController.m 中 设置 item

//1.导航条上面的标题
self.navigationItem.title = @"FirstVC";
//3.配置左边内容 显示废纸篓按钮
//    3.1创建按钮
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(handleTrash:)];

//    //3.2 给 leftitem 赋值 创建属性
self.navigationItem.leftBarButtonItem = leftItem;
[leftItem release];
//    3.3 配置右边的内容 显示为+号
//    UIBarButtonItem *jiaItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(handleJia:)];
//    self.navigationItem. rightBarButtonItem = jiaItem;
//    [jiaItem release];
//   3.4配置右边内容 设置文字类型
UIBarButtonItem *jiaItem = [[UIBarButtonItem alloc]initWithTitle:@"添加" style:UIBarButtonSystemItemDone  target:self action:@selector(handleJia:)];
self.navigationItem. rightBarButtonItem = jiaItem;
[jiaItem release];

//3. 自定义的 titleview
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeContactAdd];
self.navigationItem.titleView = button1;
//3.1 书签形状的右边按钮
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];
self.navigationItem.rightBarButtonItem = item;
[item release];
// 还可以放数组 但是 item 就要加 s
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];
UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];

self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:item,item1, nil];


导航栏总结:

/*

1.bar 下面有很多属性 要搞清楚他们的层级关系

2.bar 管理 item item 对应 controller

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: