文章目录
  1. 1. 导航控制器
  • UIControl
    • 作用:具有事件处理的控件的父类
    • 事件响应的3种形式:基于触摸、基于值、基于编辑
  • 常用方法
1
2
-(void)addTarget:(id)taget action:(SEL)action forControlEvent:(UIControlEvents)controlEvents //添加一个事件
-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents // 移除某一个事件
  • 事件处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 按下时触发
UIControlEventTouchDown
// 多击触发
UIControlEventTouchDownRepeat
// 控件内拖动触发
UIControlEventTouchDragInside
// 控件外拖动触发
UIControlEventTouchDrageOutside
// 当触摸从控件外拖动到控件内部时
UIControlEventTouchDragEnter
// 当触摸从控件内拖动到控件外部时
UIControlEventTouchDragExit
// 控件之内触摸抬起时
UIControlEventTouchupInside
// 控件之外触摸抬起时
UIControlEventTouchUpOutside
// 触摸事件取消
UIControlEventTouchCancel
// 当控件的值发生改变时
UIControlEventTouchValueChanged
// 文本控件中开始编辑
UIControlEventEditingDidBegin
// 文本控件中的文本被改变
UIControlEventEditingChanged
// 文本孔家中编辑结束
UIControlEventEditingDidEnd
// 文本孔家中通过按下回车键结束编辑时
UIControlEventEditingDidOnExit
// 所有触摸事件
UIControlEventAlltouchEvents
// 所有编辑事件
UIControlEventAllEditingEvents
// 所有事件
UIControlEventAllEvents

导航控制器

  • 基本概念
    +UINavigationController用于构建分层应用程序的主要工具,管理着多个内容视图的换入(压入)和换出(弹出)。自身提供了视图切换的动画效果。
    • 它的父类是UIViewController,是所有视图控件器的基类。
    • 导航控制器以栈的形式来实现。
  • 栈的基本概念和性质
    • 栈是一种先进后出(后进先出)的数据结构,导航控制器以栈的形式来管理视图控制器,任何视图控制器都可以放入栈中。
    • 向栈添加一个对象的操作称为入栈(push)
    • 第一个入栈的对象叫做基栈
    • 最后一个入栈的对象叫栈顶
    • 栈删除一个对象的操作叫做出栈(pop)
    • 当前现实点视图控制器,即为栈顶。选择”返回”时,这个视图控制器就出栈了。
  • 基本样式
    • 蓝色部分:导航控制器的导航栏(NavigationBar)
    • 橙色部分:控制器包含的内容视图
    • 绿色部分:导航控制器的工具栏(UIToolBar,默认是隐藏的)
  • 元素尺寸
  • 代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 控制器的初始化,为控制器添加导航控制器
RootViewController *rootVC = [[RootViewController alloc] init];
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:rootVC];
// 子控制器设置title,显示在导航栏上的标题
self.title = @"根控制器";
// 控制器之间的导航
SecondViewController *secondVC = [[SecondViewController alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
// 隐藏(显示)导航栏、工具栏目
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.navigationController setToolbarHidden:NO animated:YES];
// 延时调用hidden方法
[self performSelector:@selector(hidden) withObject:nil afterDelay:0.3];
  • Demo代码片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// AppDelegate.m
// didFinshLunchingWithOptions()
// ...
RootViewcController * rootViewController = [[RootViewcController alloc] init];
UINavigationController *navigation = [[UINavigationController alloc]initWithRootViewController:rootViewController];
self.window.rootViewController = navigation;
[rootViewController release];
[navigation release];
//RootController.m
-(void)loagView
{
UIView *baseView = [[UIView alloc] initWithFrame:[UIScreen mainScreen] applicationFrame];
baseView.backgroundColor = [UIColor purpleColor];
self.view = baseView;
[baseView release];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Push" forState:UIControlStateNormal];
[button setFrame:CGRectMake(90,100,140,35)];
[button addTaget:self action:@selector(pushVC) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button];
}
-(void)pushVC
{
SencondViewController *secondVC = [[SencondViewController alloc] init];
[self navigationController pushViewController:secondVC animated:YES];
[secondVC release];
}
//SencondViewController.m
-(void)loagView
{
UIView *baseView = [[UIView alloc] initWithFrame:[UIScreen mainScreen] applicationFrame];
baseView.backgroundColor = [UIColor orangeColor];
self.view = baseView;
[baseView release];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"HiidenOrShow" forState:UIControlStateNormal];
[button setFrame:CGRectMake(90,150,140,35)];
[button addTaget:self action:@selector(hiddenOrShow) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:button];

UIButton *back = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[back setTitle:@"backRootVC" forState:UIControlStateNormal];
[back setFrame:CGRectMake(90,200,140,35)];
[back addTaget:self action:@selector(hiddenOrShow) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:back];
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setToolBarHidden:YES animated:YES];
}
-(void)hiddenOrShow
{
if(self.navigationController.toolbarHidden)
{
[self.navigationController setToolBarHidden:NO animated:YES];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}else{
[self.navigationController setToolBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
-(void)backRootVC
{
[self.navigationController popViewControllerAnimated:YES];
}
  • 导航控制器常用属性
1
2
3
4
5
6
7
8
9
10
// 获取到在栈中最顶层的视图控制器
@property(nonatomic,readonly,retain)UIViewController *topViewController;
// 获取到在斩重当前显示的视图控制器
@property(nonatomic,readonly,retain)UIViewController *visibleViewController;
// 在栈中当前视图控制器
@property(nonatomic,copy)NSAraay *viewControllers;
// 隐藏导航栏,默认不隐藏
@property(nonatomic,getter=isNavigationBarHidden)BOOL navigationBarHidden;
// 获取到导航栏
@property(nonatomic,readonly)UINavigationBar *navigatuonBar;
  • 导航控制器常用方法
1
2
3
4
5
6
7
8
9
10
// 初始化一个根视图控制器,在栈的最底层
-(id)initWithRootViewController:(UIViewController *)rootViewController;
// 压入一个新的视图控制器
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
// 弹出一个新的视图控制器
-(UIViewController *)popViewControllerAnimated:(BOOL)animated;
// 弹出到指定的视图控制器
-(NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
// 回到跟视图控制器
-(NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
文章目录
  1. 1. 导航控制器