Ios UIView的视图已消失

Ios UIView的视图已消失,ios,objective-c,uiview,Ios,Objective C,Uiview,我在主视图中添加了如下子视图: BTLPXYPad *XYPad = [[BTLPXYPad alloc] initWithFrame: CGRectMake (30, 10, 280, 460)]; [window addSubview:XYPad]; 完成我需要的所有位,然后在BTLPXYPad类中使用以下命令将其删除: [self removeFromSuperview]; 我需要的是完成一项任务。我知道,对于UIViewController类型类,我可以使用v

我在主视图中添加了如下子视图:

    BTLPXYPad *XYPad = [[BTLPXYPad alloc] initWithFrame: CGRectMake (30, 10, 280, 460)];
    [window addSubview:XYPad];
完成我需要的所有位,然后在BTLPXYPad类中使用以下命令将其删除:

    [self removeFromSuperview];

我需要的是完成一项任务。我知道,对于UIViewController类型类,我可以使用viewDidDissapear,但对于UIView类型,我似乎找不到相同的东西。有人能帮忙吗?

要知道视图何时实际被删除,可以实现
didMoveToSuperview
并检查superview现在是否为
nil

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

  if (!self.superview) {
    NSLog(@"Removed from superview");
  }
} 
我需要的是完成一项任务

当你说
[self removeFromSuperview]
时,它就消失了。只有一个runloop的延迟才能让它看起来消失,但是删除视图会删除视图

因此,解决方案就是继续“任务一旦完成”:

如果“完成你的任务”代码似乎放错了地方,那就不是了。当视图消失时,您需要通知视图,这表明您的体系结构一开始就错了。视图不应该执行任何“任务”;它是模型视图控制器结构中的视图。它只是展示一些东西。您的视图控制器是控制器;这是做这项任务的人


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

UIView
有一个
willRemoveSubview:
方法,请参阅。或者,您可以在您的
UIView
子类中重写
removeFromSuperview
。模型视图控制器可能重复,请参见我在此处对模型视图控制器的完整讨论:
[self removeFromSuperview];
[self removeFromSuperview];
// do your task