UIView的viewDidDisappear

时间:2014-05-31 14:18:28

标签: ios objective-c uiview

我在主视图中添加了这样的子视图:

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

完成我需要的所有位,然后在BTLPXYPad类中使用它删除它:

    [self removeFromSuperview];

我需要的是在任务结束后执行任务。我知道使用UIViewController类型类我可以使用viewDidDissapear,但我似乎无法为UIView类型找到相同的东西。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

要知道您何时删除了某个视图,您可以实施didMoveToSuperview并检查现在是否超级视图nil

- (void)didMoveToSuperview;
{
  [super didMoveToSuperview];

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

答案 1 :(得分:0)

[self removeFromSuperview];
     

我需要的是在任务结束后执行任务。

当您说[self removeFromSuperview]时, 已消失。只有一个runloop延迟,但删除视图会删除视图。

因此,解决方案就是继续执行“任务一旦消失”:

[self removeFromSuperview];
// do your task

如果看起来像“做你的任务”代码是在错误的地方 - 事实并非如此。您需要在视图消失时通知视图的事实表明您的体系结构开始时是错误的。视图不应该执行任何“任务”;它是模型 - 视图 - 控制器结构中的视图。它只显示东西。您的视图控制器是Controller;这是完成任务的人。

此时控制器也不需要查询视图,因为视图不应该存储任何重要数据。数据是模型,在此之前应该已经由Controller检索和存储。