如何在显示时立即关闭模态视图(无需用户交互)

时间:2010-02-18 10:08:20

标签: objective-c iphone cocoa-touch modal-dialog

如果我的问题可能导致琐碎或模糊,我道歉。我正在使用模态呈现的视图。为了实现一点'scenographic'动画效果,基于参数的值,我希望达到以下行为:

如果值为0,则模态显示的视图将保持显示并允许用户操作,直到按下后退按钮(在这种情况下视图被取消)

如果值为1,则以模态方式显示视图,然后立即将其解除,并在调用视图上方显示警报视图。

现在,我试图将控件放在viewDidAppear方法中的值,在这样的模态视图控制器中

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
if (<value> == 1) {
[self dismissModalViewControllerAnimated:YES];
                  }
}

我得到的是: 如果值为0,则模态视图按计划保持

如果值为1,则模态视图按计划被取消,但应用程序在之后立即崩溃。调试器似乎表明问题出现在

-[UIWindowController transitionViewDidComplete: fromView:toView]

现在的问题是: 我试图做一些严重非法/不可能的事情吗?

如果存在解决方案,它只是将控件移动到另一个方法?如果是,哪种方法?

或者解决方案要复杂得多?

谢谢

1 个答案:

答案 0 :(得分:3)

当viewDidAppear通知调用返回时,UIWindowController可能会错误地认为视图仍然可见。

尝试使用延迟为零的performSelector:withObject:afterDelay: - 它会在控制返回到运行循环后(并且在UIWindowController调用堆栈之外)尽快调用所选方法:

- (void) delayedDismissOfModalViewController {
    [self dismissModalViewControllerAnimated:YES];
}

- (void) viewDidAppear: (BOOL) animated {
   [super viewDidAppear:YES];

   if (<value> == 1) {
      [self performSelector: @selector(delayedDismissOfModalViewController)
                 withObject: nil
                 afterDelay: 0];
   }
}