UI_07导航控制器
来源:互联网 发布:王牌特工知乎 编辑:程序博客网 时间:2024/06/06 18:12
UINavigationController : 继承于UIViewController
导航控制器, 是iOS中最常用的多视图控制器之一, 用来管理多个视图控制器
导航控制器以栈的方式管理所控制的视图控制器, 只要要有一个被管理的视图控制器, 这个控制器称作 : 导航控制器的根视图控制器
- 创建导航控制器的根视图控制器
首先需要创建一个继承于UIViewController的类:MainViewController, 然后在AppDelegate.m里创建
// 主要代码:MainViewController *mainVC = [MainViewController alloc]init];UINavigationController *naVC = [[UINacigationController alloc]initWithRootViewController: mainVC];self.windwo.rootViewController = naVC;[mainVC release];[naVC release]; **不要忘记对dealloc 和 window进行释放**
- 在MainViewController.m中, 进行基本设置
- 注意 : 导航视图控制器的高度是44, 上面的状态栏高度是20, 加在一起默认高度是64
// 1.外观设置 背景颜色: (注意:不是所有的背景颜色都是backgroundColor) self.navigationController.navigationBar.bartintColor = [UIcolor grayColor];// 2.设置标题 self.title = @"猫眼电影" // 方法1// 3.内容设置 self.navigationItem.title = @"猫眼电影"; // 设置标题:方法2 做一些指定的视图,作为titleView UISegementedControl *seg = [[UISegementedControl alloc]initWithItem: @[@"信息", @"通话"]]; self.navigationItem.titleView = seg; // 4.有关UINavigationBar 是导航条,默认为半透明, 为了防止坐标系被篡改,我们把它从透明设置成不透明,这样坐标系原点自动向下推64 self.nacigationController.navigationBar.translucent = NO; // 5.创建左右两边按钮,默认左边是back self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(leftButtonAction:)] autorelease]; //系统自带按钮 self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"32.png"] style: UIBarButtonItemStylePlain target:self action:@selector(rightButtonAction:)]autorelease]; //自定义图案 //**创建按钮的时候,可以通过initWithBarButtonSystemItem来使用系统自带的按钮,也可以自定义图案,但用上面方式创建的图案为系统默认的蓝色,要想使自定义的图案以原来的形式显示, 可以进行如下改动: UIButton *ringhtButton = [UIButton buttonWithType:UIButtonTypeCustom]; ringhtButton.frame = CGRectMake(0, 0, 40, 40); [ringhtButton setImage:[UIImage imageNamed:@"32.png"] forState:UIControlStateNormal]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:ringhtButton]; // 对应实现方法: - (void)leftButtonAction:(UIBarButtonSystemItem)button{ NSLog(@"1"); } - (void)rightButtonAction:(UIBarButtonSystemItem)button{ NSLog(@"2"); }// 6.导航控制器控制页面跳转 (自带返回) // ①创建一个跳转按钮 UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; button.frame = CGRectMake(200, 100, 100, 40); [button setTitle:@"下一页" forState:UIControlStateNormal]; [self.view addSubview:button]; button.layer.borderWidth = 1; button.layer.cornerRadius = 10; [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; // ②跳转方法 - (void)click:(UIButton *)button{ // 先创建下一页对象 SecondViewController *secVC = [[SecondViewController alloc]init]; // 跳转 [self.navigationController pushViewController:secVC animated:YES]; // 释放 [secVC release]; }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
界面传值 : 前向后
// ①在后一个界面的.h文件里设置属性 (SecondViewController.h) // 传数值 @property(nonatomic, assign)NSInteger number; // 传字符串 @property(nonatomic, copy)NSString *str; // 传数组 @property(nonatomic,copy)NSArray *arr;// ②传值 //在第一个界面的跳转方法内写 (因为只有跳转的方法内会创建第二个页面的对象) secVC.number = 100; // 传数值 secVC.str = self.myTextField.text; // 传字符 : 不要忘记建一个textfield secVC.arr = @[@"杨林", @"刘珊珊"]; //传数组
界面传值 : 后向前 需要写协议
例:
点击button, 将textfield里输入的内容传到第一个界面的label里
–SecondViewController.m文件–
#import <UIKit/UIKit.h>// 第一步 : 声明一份协议@protocol SecondViewControllerDelegate <NSObject> // 协议方法 - (void)changeValue:(NSString *)value;@end@interface SecondViewController : UIViewController// 第二步 : 设置代理人属性@property(nonatomic, assign)id<SecondViewControllerDelegate>delegate;@end
–SecondViewController.m文件–
#import "SecondViewController.h"@interface SecondViewController ()// 一个textfiel, 一个button@property(nonatomic, retain)UITextField *textfield;@property(nonatomic, retain)UIButton *button;@end@implementation SecondViewController- (void)dealloc{ [_textfield release]; [_button release]; [super dealloc];}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor grayColor]; self.title = @"第二页"; self.textfield = [[UITextField alloc]initWithFrame:CGRectMake(100, 100, 100, 40)]; self.textfield.layer.borderWidth = 1; self.textfield.layer.cornerRadius = 10; [self.view addSubview:self.textfield]; [_textfield release]; self.button = [UIButton buttonWithType:UIButtonTypeCustom]; self.button.frame = CGRectMake(100, 200, 150, 40); [self.button setTitle:@"返回" forState:UIControlStateNormal]; self.button.backgroundColor = [UIColor redColor]; [self.view addSubview:self.button]; self.button.layer.borderWidth = 1; self.button.layer.cornerRadius = 10; [self.button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];}// 点击返回// 协议的触发条件是点击按钮, 所以在这里面进行协议传值的第三步// 3.设置代理人执行的协议方法- (void)click:(UIButton *)button{ [self.navigationController popToRootViewControllerAnimated:YES]; [self.delegate changeValue:self.textfield.text];}
–MainViewController.m文件–
#import "MainViewController.h"#import "SecondViewController.h"// 第四步 : 签订协议@interface MainViewController ()<SecondViewControllerDelegate>@property(nonatomic, retain)UILabel *label;@property(nonatomic, retain)UIButton *button;@end@implementation MainViewController- (void)dealloc{ [_label release]; [super dealloc];}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor orangeColor]; //设置不透明 self.navigationController.navigationBar.translucent = NO; self.title = @"第一页"; self.label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 40)]; self.label.layer.borderWidth = 1; [self.view addSubview:self.label]; [_label release]; self.button = [UIButton buttonWithType:UIButtonTypeCustom]; self.button.frame = CGRectMake(100, 200, 150, 40); [self.button setTitle:@"下一页" forState:UIControlStateNormal]; self.button.backgroundColor = [UIColor redColor]; [self.view addSubview:self.button]; self.button.layer.borderWidth = 1; self.button.layer.cornerRadius = 10; [self.button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];}- (void)click:(UIButton *)button{// push下一页 SecondViewController *secVC = [[SecondViewController alloc]init]; [self.navigationController pushViewController:secVC animated:YES]; [secVC release];// 第五步 : 设置代理人 secVC.delegate = self;}// 第六步 : 实现协议方法- (void)changeValue:(NSString *)value{ NSLog(@"%@", value); self.label.text = value;}
0 0
- UI_07导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 导航控制器
- 控制器和导航控制器
- 导航控制器及TabBar控制器
- 导航控制器和标签控制器
- 控制器 ------ tabbar控制器 和 导航控制器
- XCode 4.2 导航控制器
- 导航视图控制器UINavigationController
- IOS导航控制器
- 导航控制器 ( UINavigationController )
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- Apache+Tomcat负载均衡两种session共享方式的设置
- NYOJ 305 表达式求值(递归)
- 【leetcode】232. Implement Queue using Stacks
- 经典排序算法之直接插入排序
- UI_07导航控制器
- poj 1426
- 传统创业 vs. 精益创业:为什么说项目经理已经名存实亡
- windows下搭建git的SSH服务器
- node.js概述
- leetcode_Evaluate Reverse Polish Notation
- C#高级编程七十六天----使用指针实现基于栈的高性能数组
- 神经网络:caffe特征可视化的代码样例
- 有的时候用yum 在线安装linux软件包的时候 ,会提示找不到镜像的地址