UIView-加载视图时如何获得通知?


Answers:


268

根据您需要执行哪种操作,有几种技术:

  1. -(id)initWithFrame:(CGRect)frame-UIView的指定初始化程序;除非视图是从笔尖加载的,否则总是发送到UIView进行初始化。
  2. -(id)initWithCoder:(NSCoder *)coder -每当从笔尖加载视图时,总是发送以初始化UIView;
  3. -(void)awakeFromNib-在笔尖中的所有对象初始化并连接后发送;仅当您从笔尖加载对象时才适用;你必须叫超级;
  4. -(void)willMoveToSuperview:(UIView *)newSuperview-在将视图作为子视图添加到另一个视图之前立即发送;newSuperview当您从视图的超级视图中删除视图时,它可能为零;
  5. -(void)willMoveToWindow:(UIWindow *)newWindow-在将视图(或其父视图)添加到窗口之前立即发送;newWindow当您从窗口中删除视图时,它可能为零;
  6. -(void)didMoveToSuperview -在将视图插入视图层次结构后立即发送;
  7. -(void)didMoveToWindow-在视图获得其window属性设置后立即发送。--

基本上,您可以选择在初始化(1&2),从笔尖(3)加载,插入视图层次结构(4&5)以及之后(6&7)期间执行操作。


非常感谢完美答案(非常详细)。我正在修改分段控件,并且没有显示更改,因为我在初始化过程中调用了修改方法,将其移至didMoveToWindow并修复了所有问题
aryaxt 2010年

1
看来所有这一切都发生在viewController中的viewDidLoad之前
Alex Chan

3
-(void)willMoveToSuperview:(UIView *)newSuperview是解决我所有问题的良药,非常感谢!
Erion S

我再次忘记,如果在初始化过程的一开始就一直在UIView中校准它们,那么某些事情将不起作用...因此,在7中进行操作或延迟执行总是可以的!:)
Alex Cio
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.