【问题标题】:Iphone: stop execution of code when alert is shown in a viewWillAppear implementationIphone:在 viewWillAppear 实现中显示警报时停止执行代码
【发布时间】:2010-10-02 20:36:48
【问题描述】:

我有一个工作应用程序

在加载第一个视图之前,我在 viewWillAppear 方法中放置了一个警报:

    - (void)viewWillAppear
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyAppp" message:@"Application will connect to Internet. Continue?"
                                               delegate:self cancelButtonTitle:nil otherButtonTitles:@"No, quit", @"Yes", nil];
    [alert show];    
    [alert release];
}

我可以正确点击两个按钮(是/否)...

但是...我希望代码执行停止并等待答案,但代码继续运行,连接到互联网并检索数据...

如何根据用户输入阻止视图加载?

【问题讨论】:

    标签: iphone cocoa-touch uikit viewwillappear


    【解决方案1】:

    viewWillAppear 是一个通知,它允许你在视图显示之前完成一些事情,你无法避免视图出现在这里。您必须审查您的实施。

    【讨论】:

    • 所以,我发现基本上没有办法以模态方式显示 UIAlertView(代码中断)
    • 你可以,但在那种情况下不行。 UIAlertView 不会停止代码执行。您应该退出正在显示警报的函数,并在 UIAlertViewDelegate 中继续您的例程。
    【解决方案2】:

    只需将您的一个 viewWillAppear 方法分成两个方法。不要试图在一大块顺序代码中完成所有操作。

    第一种方法将启动警报,然后退出/退出/返回。

    第二种方法可以被警报按钮响应处理程序调用,然后只有在被警报处理程序调用后,在用户响应之后才完成加载视图。

    您可能需要也可能不需要在第一种方法和第二种方法之间保存额外的状态信息(在额外的属性或实例变量中,而不是方法局部变量中)。

    【讨论】:

      【解决方案3】:

      可以使用以下内容,我知道它的小老问题,但可能对其他人有用 ..

      [alert show];
      
      while ((!alert.hidden) && (alert.superview != nil))
          {
              [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode];
      
          }
      

      【讨论】:

        【解决方案4】:

        我通过在“ViewDidLoad”中显示答案解决了这个问题,让一个委托来获取按下了哪个按钮,然后仅当用户按下“是”时才处理数据

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-13
          • 1970-01-01
          • 2015-12-19
          • 2019-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多