UIView可以知道它何时出现在屏幕上

时间:2013-09-02 12:04:21

标签: iphone ios objective-c uiview

我有一个UIView,其中包含很多组件,如果删除了视图或者弹出/推送了其父视图控制器,我想更新其中的一些组件。 UIView是否可以获取此信息

UIViewController

中的方法类似
-(void)viewWillAppear;

想要像

这样的东西
-(void)UIViewWillAppear;

编辑我看到的一些评论:

我会再解释一下

但是我有一个特殊的情况,UIView需要在它自己的顶部添加一个“浮动视图”(想象一下缩放/平移/滚动UISCrollView子类,浮动在它自己的顶部),这样当它滚动浮动视图时相对于超级视图到位。我尝试重新计算-(void)layoutSubviews方法中“浮动”的新来源,但重新放置非常不稳定。为了解决这个波动性问题,自定义UIView添加了浮动视图(理论上是它的子视图)作为其超级视图的子视图(有点绕口令:))。 现在,当删除自定义UIView(或者其包含视图控制器被推离屏幕外)时出现问题。特殊的UISCrollView如何从superView中删除浮动视图。

3 个答案:

答案 0 :(得分:2)

您可以覆盖willMoveToSuperview:以查明何时将视图插入层次结构以及何时将其删除。这可能不是你想要的,因为视图可以是层次结构的一部分而不是自己插入。

要查看屏幕上是否使用willMoveToWindow:。如果参数为非零,则视图才会成为可见视图层次结构的一部分。

如果您在更改后需要执行某些操作,请使用didMoveToWindow:

答案 1 :(得分:0)

UIView不会“随机”出现/消失或者他们想要 - 你的视图控制器(或代码)控制它。因此,您应该在何时展示它们并找到所需的代码。

答案 2 :(得分:0)

UIView class reference有一些kvo观察变化。

通过实施-(void)willRemoveSubview:(UIView *)subview,您可以看到相反的方向。

更新阅读完解释后:

我希望我理解正确。我之前做过类似的事情,但使用的是UITableView而不是UIScrollView(但它们在下面完全相同)。

这就像一个弹出式细节视图。我已经解决了,你已经解决了将详细信息视图添加到UITableView超级视图,然后我在详细视图中添加了一个关闭的UIButton,并带有相应的IBOutlet:

@interface CustomUIView : UIView

@property(nonatomic,weak) IBOutlet UIButtonView *closingButton;

-(void)closeDetail:(IBAction)action;

@end

并且行动只是:

-(void)closeDetail:(IBAction)action {
   // do your cleaning/change to the detail subviews
   [self removeFromSuperview]; // <-- clsoe the detail view
}

sdsds