【问题标题】:viewDidDisappear for UIViewUIView 的 viewDidDisappear
【发布时间】:2014-05-31 14:18:27
【问题描述】:

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

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

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

    [self removeFromSuperview];

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

【问题讨论】:

标签: ios objective-c uiview


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    [self removeFromSuperview];
    

    我需要的是在任务完成后执行它。

    当你说[self removeFromSuperview] 时,它已经消失了。 看起来消失了只有一个运行循环的延迟,但删除视图会删除视图。

    所以解决方案就是继续你的“任务一旦完成”:

    [self removeFromSuperview];
    // do your task
    

    如果“做你的任务”代码似乎放错了地方,那就不是。您需要在视图消失时通知视图这一事实表明您的架构一开始就是错误的。视图不应该执行任何“任务”;它是Model-View-Controller结构中的View。它只是显示东西。你的视图控制器是控制器;它是完成任务的人。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2018-05-30
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多