// 导航控制器
// 导航条是悬浮在所有子视图之上
// 导航条的高度为44像素
// 所以添加控件的时候 控件的y轴坐标 最好大于64
// 界面切换的第三种方法
// 通过子视同控制器调用方法获取导航控制器self.navigationController 所有视图控制器对象都能调用该方法获取导航控制器 即使该视图控制器不在导航控制器之上 那么也能调用该方法 只是得到的结果为空
// ios7.0 之后 导航控制器进行界面切换会出现卡顿的现象 解决办法就是将调整过去的视图控制器上得视图添加一个颜色
//pushViewController:原理和压栈相同 也就是导航控制器最顶端显示的是新的视图控制器
// 到行条 导航条悬浮在所有子视图控制器之上
// 导航控制器上得所有子视图控制器公用一个导航条 只是不同的视图控制器上显示的导航条样式不同而已
1.页面跳转
[self.navigationController pushViewController:fouth animated:YES];
2.跳回到首页
[self.navigationController popToRootViewControllerAnimated:YES];
// 获取导航控制器第二个视图控制器对象
2.调回到第二个页面
// <1>获取导航控制器的所有子视图控制器
NSArray *arr = [self.navigationController viewControllers];
//<2>导航控制器的子视图控制器的下标从0开始
UIViewController *viewController = [arr objectAtIndex:1];
[self.navigationController popToViewController:viewController animated:YES];
// <1>获取导航控制器上得导航条
// self.navigationController.navigationBar
/ <2>添加背景颜色
self.navigationController.navigationBar.backgroundColor = [UIColor redColor]
// <3>为导航条添加背影图片
// 导航条的图片必须按照规定P图
// 3.5寸/3.5 寸retina屏 (竖屏)人像模式 导航条背影图片像素 320 * 44
// 4.寸/4.0寸retina屏 导航条背影图片的像素为 640*88
//3.5寸/3.5retina 屏(横屏) -- 风景模式 导航条背景图片像素 480 * 32
// 4.寸/4.0寸 retina屏 导航条的背景图片像素 960 * 64
/*
UIBarMetricsDefault, 竖屏
UIBarMetricsLandscapePhone, 横屏
*/
[setBackgroundImage:[UIImage imageNamed:@"navBg.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg-32.png" ] forBarMetrics:UIBarMetricsLandscapePhone];
// 将导航条隐藏
// self.navigationController.navigationBarHidden = YES;
//<1>为导航条添加文字标题
//[注意]为导航条添加内容 需要借助与 self.navigationItem
self.navigationItem.title = @"第一页";
// <2>为导航条添加文字按钮
// 为导航条,工具条 ,分栏控制器上添加按钮 用按钮的类 是UIBarButtonItem
UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithTitle:@"分类" style:UIBarButtonItemStyleBordered target:nil action:nil];
// <3>为导航条添加左侧按钮
self.navigationItem.leftBarButtonItem = left;
UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithTitle:@"设置" style:UIBarButtonItemStyleBordered target:self action:@selector(pressBarBtn:)];
self.navigationItem.rightBarButtonItem = right;
self.view.backgroundColor = [UIColor cyanColor];
// 导航控制器自动生成返回按钮 返回按钮的命名为Back
// 如何第一个控制器的导航条上存在标题 那么返回按钮的命名 就以第一个视图控制器的tetle命名
//返回按钮如果从新定义就失去了返回按钮的功能必须手动写代码实现返回功能
// 默认添加的图片的样式是只有轮廓
UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"tab_c0"] style:UIBarButtonItemStyleDone target:self action:@selector(pressBarBtn:)];
self.navigationItem.leftBarButtonItem = left;
left.tintColor = [UIColor magentaColor];
left.tag = 100;
// 为了保持图片的原有样式 按钮就要使用UIButton添加
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
// 按钮的坐标值为无效值 只有宽高为有效值
btn.frame = CGRectMake(0, 0, 30, 30);
[btn setImage:[UIImage imageNamed:@"tab_c3"] forState:UIControlStateNormal];
// 子定义的按钮添加到导航条上必须转换成UIBarButtonItem 类型
UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithCustomView:btn];
self.navigationItem.rightBarButtonItem = right;
[btn addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];
// [注释]使用自定义按钮的点击事件 按钮的点击事件是添加到UIButton 而不是添加到UIBarButtonItem上
// 为导航条添加导航条视图 (可以添加任意类型的控件)
// [注意] 标题视图默认是显示在导航的中心位置 所以标题视图的坐标 没有意义的
// 标题视图如果不设置宽度默认宽度 默认宽度和标题视图的内容的宽度相同
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 30)];
label.backgroundColor = [UIColor greenColor];
label.text = @"我是第二视图";
self.navigationItem.titleView = label;
// 添加系统样式的按钮
UIBarButtonItem *pr = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *right1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil];
right1.tintColor = [UIColor yellowColor];
UIBarButtonItem *right2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:nil action:nil];
UIBarButtonItem *right3 = [[UIBarButtonItem alloc]initWithTitle:@"Bar" style:UIBarButtonItemStyleDone target:nil action:nil];
NSArray *rightBars = @[right1,pr,right2,right3];
self.navigationItem.rightBarButtonItems = rightBars;
// 工具条
// 工具条默认是隐藏的
// 获取工具条
// self.navigationController.toolbar
// self.navigationController.toolbar
// <1>将工具条显示出来
self.navigationController.toolbarHidden = NO;
// 工具条默认是无色半透名状态
// 高度为44px
//<2>工具条添加背影图片
[self.navigationController.toolbar setBackgroundImage:[UIImage imageNamed:@"toolBar"] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
/ 定义系统间隔控件 自动分配系统按钮之间的间隔
UIBarButtonItem *sp = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
self.toolbarItems = @[itme1,sp,itme2,sp,itme3];
文本输入框
// <1>创建文本输入框对象
UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(10, 50, 300, 40)];
// <2>设置文本输入框的背景颜色
field.backgroundColor = [UIColor cyanColor];
/<3>问本框的水印效果(提示信息)
field.placeholder = @"轻输入信息";
// <4>设置文本框的显示位置
field.textAlignment = NSTextAlignmentCenter;
// <5>设置文本内容加密效果
field.secureTextEntry = YES;
// <6>添加 清楚按钮(设置清楚按钮的时间)
/*
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
*/
field.clearButtonMode = UITextFieldViewModeWhileEditing;
//<7>设置文本输入框的边框效果
field.borderStyle = UITextBorderStyleRoundedRect;
<8>设置一下键盘的样式
// field.keyboardType = UIKeyboardTypeNumberPad;
// <9>开始键盘的第一响应者身份 (当界面出现得实惠键盘也 随之出现)
[field becomeFirstResponder ];
/ <10>隐藏键盘 (调用协议中得方法)
field.delegate = self; // 设置代理
field.tag = 100;
// 点击retutrn按钮 隐藏键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
// 隐藏键盘 就是取消键盘的第一响应者省份
return [textField resignFirstResponder];
}
1.要借助触摸时间
2.借助手势
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITextField *field = (UITextField *)[self.view viewWithTag:100];
[field resignFirstResponder];
}
// 隐藏键盘的第二种方法 就是为当前视图添加点击事件
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
tap.numberOfTapsRequired =1;
tap.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:tap];
-(void)tapAction:(UITapGestureRecognizer *)tap
{
UITextField * field = (UITextField *)[self.view viewWithTag:100];
[field resignFirstResponder];
}
// 文本视图UITextView
// 文本框UITextField只能接受一行数据 不能换行
// UITextView 能够接受多行数据 UITextView 能够使用UITextField的所有方法(除水印效果)
// <1>
UITextView *view = [[UITextView alloc]initWithFrame:CGRectMake(10, 100, 300, 300)];
view.backgroundColor = [UIColor magentaColor];
view.tag = 200;
[self.view addSubview:view];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITextView *view = (UITextView *)[self.view viewWithTag:200];
[view resignFirstResponder];
}