UIView类的回调方法

来源:互联网 发布:批量测试telnet端口 编辑:程序博客网 时间:2024/05/16 10:30

当视图的层级发生变动时, 系统会向相关的视图发送回调(即调用相关视图中的特定的方法). iOS SDK 提供了6个回调方法. Developer可以以此来追踪视图的变动.

1. didAddSubview: 方法

/** Tells the view that a subview was added. @param subview The view that was added as a subview. */ - (void)didAddSubview:(UIView *)subview {   NSLog(@"%s", __func__);    NSLog(@"subview = %@", subview); }

如果有人通过添加子视图的方法, 成功地添加了一个子视图, 那么系统会调用该视图上级视图的 didAddSubview 方法. 注意: 仅会调用其直接上级视图中的方法, 并非所有的父视图. Developer可以覆写该方法, 以便在新的子视图添加进来的时候, 做一些自己想做的事情.
这里写图片描述
添加子视图的方法共有4个:
- addSubview:
- insertSubview: atIndex:
- insertSubview: aboveSubview:
- insertSubview: belowSubview:


2. willRemoveSubview: 方法

某视图将从父视图上移除, 会且仅会调用其直接上级视图的willRemoveSubview:方法.

/** Tells the view that a subview is about to be removed. @param subview The subview that will be removed. */- (void)willRemoveSubview:(UIView *)subview {    NSLog(@"%s", __func__);    NSLog(@"subview = %@", subview);}

3. willMoveToSuperview: 方法

/** Tells the view that its superview is about to change to the specified superview. @param newSuperview A view object that will be the new superview of the receiver. This object may be nil. */- (void)willMoveToSuperview:(UIView *)newSuperview {    NSLog(@"%s", __func__);    NSLog(@"newSuperview = %@", newSuperview);}
  • 在子视图将要变更其上级视图, 系统会调用子视图的该方法.
  • 无论该视图之前有没有父视图, 即新创建的视图B添加到A视图上, 同样会调用B视图的该方法.
  • 将B视图从其父视图A上移除, 同样会调用B视图的该方法, 只是此时, 参数newSuperview为nil.

4. didMoveToSuperview方法

这里写图片描述
- 此方法没有参数, 有的技术丛书上, 写的是didMoveToSuperview:, 这是技术性错误. (《iOS核心开发手册》第五版); 其实我很好奇, 为什么苹果在此方法中没有添加newSuperview参数?
- 将新创建的B视图添加到A视图上, 会调用B视图的此方法.
- 将A视图的子视图B, 移动到另一个新视图C上. 会调用B视图的此方法.


5. willMoveToWindow: 方法

这里写图片描述

在视图即将移动到某个视窗时, 会调用此视图的willMoveToWindow:方法.


6. didMoveToWindow 方法

  • didMoveToSuperview一样, 此方法同样也没有参数. 其回调机制和didMoveToSuperview相仿.
  • 当视图添加或者切换到新的视窗层级(Window hierarchy), 系统会调用视图的此方法.
  • 如果想通过airPlayer技术在设备之外的屏幕上显示内容, 一般都需要用到此方法.

Others

这些方法很少会用到,然而一点需要使用,它们总能帮上大忙,因为开发者无需预先知道子视图或者上级视图所属的类,不必导入相关的类的头文件,无需手动建立视图间的关系,在视图实例存在的地方,即可直接在这些方法中拿到子视图和上级视图的实例,直接对子视图和上级视图进行操作,添加新的行为。与Window相关的回调主要用于在另外一个UIWindow中显示某种视图,例如警告视图或是带键盘的输入界面等。
原创粉丝点击