5

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

类似于中的方法UIViewController

-(void)viewWillAppear;

想要类似的东西

-(void)UIViewWillAppear;

编辑我看到的一些评论:

我再解释一下

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

4

3 回答 3

2

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

要确定它是否在屏幕上使用willMoveToWindow:。如果参数不为 nil,则视图刚刚成为可见视图层次结构的一部分。

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

于 2013-09-02T12:26:28.937 回答
0

UIView 不会“随机”出现/消失,也不会在需要时出现-您的视图控制器(或代码)控制它。因此,您应该找出何时显示它们,并调用您需要的代码。

于 2013-09-02T12:17:22.990 回答
0

UIView类参考有一些 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

于 2013-09-02T12:18:09.637 回答