viewDidDisappear for UIView

3
我已在主视图中添加了一个子视图,代码如下:

    BTLPXYPad *XYPad = [[BTLPXYPad alloc] initWithFrame: CGRectMake (30, 10, 280, 460)];
    [window addSubview:XYPad];

我已经完成了所有需要的内容,并在BTLPXYPad类中使用以下代码将其删除:

    [self removeFromSuperview];

我需要在视图消失后执行一个任务。我知道使用UIViewController类可以使用viewDidDisappear,但是我似乎找不到UIView类型的相同内容。请问有人可以帮忙吗?


4
UIView 类有一个 willRemoveSubview: 方法,详见 此处。或者你可以在你的 UIView 子类中重写 removeFromSuperview 方法。 - sooper
2个回答

4
要知道视图何时被移除,您可以实现didMoveToSuperview并检查superview是否为nil
- (void)didMoveToSuperview;
{
  [super didMoveToSuperview];

  if (!self.superview) {
    NSLog(@"Removed from superview");
  }
} 

0
[self removeFromSuperview];

What I need is to perform a task once it has gone.

当你说[self removeFromSuperview]时,它就被移除了。只有一个runloop的延迟让它看起来已经被移除了,但是移除视图就是移除视图。
因此,解决方案就是在视图被移除后立即继续执行你的“任务”:
[self removeFromSuperview];
// do your task

如果“执行任务”的代码似乎放错了位置 - 实际上并不是这样。需要在视图消失时通知视图的事实表明,你的架构一开始就是错误的。视图不应该执行任何“任务”;它只是模型-视图-控制器结构中的视图,用于显示内容。你的视图控制器是控制器,它才是执行任务的对象。

此时,控制器也不应该需要“咨询”视图,因为视图本来就不应该存储任何重要数据。数据是模型,应该在此之前由控制器检索和存储。


请参阅我关于模型-视图-控制器的完整讨论:http://www.apeth.com/iOSBook/ch13.html#_model_view_controller - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接