【问题标题】:UIView - How to get notified when the view is loaded?UIView - 加载视图时如何获得通知?
【发布时间】:2011-05-28 23:14:35
【问题描述】:

有没有类似于UIViewControllerviewDidLoadUIView? 我需要在 UIView 加载后立即收到通知(UIView 的子类),并执行一些操作。

【问题讨论】:

    标签: ios objective-c iphone uiview viewdidload


    【解决方案1】:

    根据您需要执行的操作类型,有几种技巧:

    1. -(id)initWithFrame:(CGRect)frame - UIView 的指定 初始化器;总是发送到一个 UIView 来初始化它,除非 视图是从笔尖加载的;
    2. -(id)initWithCoder:(NSCoder *)coder - 每当从 nib 加载视图时,总是发送来初始化 UIView;
    3. -(void)awakeFromNib - 在 nib 中的所有对象都初始化并连接后发送;仅当您从笔尖加载对象时才适用;你必须打电话给super;
    4. -(void)willMoveToSuperview:(UIView *)newSuperview - 在视图作为子视图添加到另一个视图之前立即发送; newSuperview 从父视图中移除视图时可能为 nil;
    5. -(void)willMoveToWindow:(UIWindow *)newWindow - 在视图(或其父视图)添加到窗口之前立即发送;当您从窗口中移除视图时,newWindow 可能为 nil;
    6. -(void)didMoveToSuperview - 在视图插入视图层次结构后立即发送;
    7. -(void)didMoveToWindow - 在视图设置其窗口属性后立即发送。 -

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

    【讨论】:

    • 非常感谢完美的回答(非常详细)。我正在修改一个分段控件,它没有显示更改,因为我在初始化期间调用了修改方法,我将它移到了 didMoveToWindow 并修复了所有问题
    • 这一切似乎都发生在viewController中的viewDidLoad之前
    • -(void)willMoveToSuperview:(UIView *)newSuperview 解决了我所有的问题,非常感谢!
    • 我又忘记了,如果你在初始化过程的一开始就在 UIView 中调用它们,有些事情就不起作用.....所以在 7 中执行或从那里延迟执行将会总是工作! :)
    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多