【问题标题】:Detect when UIView is added in other UIView which MUST has a UIViewController?检测何时将 UIView 添加到必须具有 UIViewController 的其他 UIView 中?
【发布时间】:2016-12-17 11:49:18
【问题描述】:

在其他具有 UIViewController 的 UIView 中添加 UIView 时是否有通知或回调。我们可以通过 nextResponder 获取 UIView 的 ViewController,如果它有的话。 (Reference)

但是依赖 nextResponder 是不可靠的,如果 UIView 没有被添加到有 ViewController 的 View 中,这个方法会失败。例如,当我们从 UITableViewDataSource 的cellForRowAtIndexPath 中的单元格响应者调用时。因为在调用cellForRowAtIndexPath 的时候,出队的单元格还没有被添加到UITableView 中。但是,我们可以在- tableView:willDisplayCell:forRowAtIndexPath: 中调用该方法,因为在调用- tableView:willDisplayCell:forRowAtIndexPath: 时,单元格已经被添加到TableView 中。

【问题讨论】:

    标签: ios objective-c iphone uitableview uiview


    【解决方案1】:

    所以如果你有ViewA 这是ViewControllerA 的视图并且你想添加ViewB 你可以继承ViewB

    @protocol ViewBDelegate
    
    - (void) viewAddedToSuperview:(ViewB*)sender;
    
    @end
    
    @interface ViewB: UIView
    
    @property (nonatomic, assign) id< ViewBDelegate > delegate;
    
    @end
    @implementation
    
    - (void)didMoveToSuperview {
        [super didMoveToSuperview];
        [delegate viewAddedToSuperview:self];
    }
    
    
    @end
    

    ViewControllerA 中你实现了ViewBDelegate 协议。

    这只是我的想法的一个例子。

    在 cmets 中告诉我它可以帮助您,否则我会尝试根据您的目标提出其他解决方案。

    【讨论】:

    • 感谢您的回答。这可能不是我要找的。也许没有完美的解决方案。我的问题是,当我的“视图”被添加为某些“视图”的子视图时(如:“ViewSuper”)。如果这个“ViewSuper”没有 UIViewController 并且“ViewSuper”的超级视图都没有 UIViewController,我不想被调用。在您的情况下,如果 ViewA 不是 ViewController 的视图,didMOveToSuperview 仍然会被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2011-06-15
    • 2011-11-13
    相关资源
    最近更新 更多