尝试在<app.viewcontroller>上呈现<app.tabcontroller>,它已在swift中呈现<uialertcontroller>

时间:2016-02-18 23:49:21

标签: ios swift uiviewcontroller uialertcontroller

好的,我在我的ios应用程序中为操作添加please wait弹出窗口的时间比平时要长。

我有一个从我的ViewController到TabController的segue,当我像这样调用它时:

self.performSegueWithIdentifier("openMainApp", sender: self)

一切正常。

但当我用它包围时:

let alert = UIAlertController(title: nil, message: "Please wait...", preferredStyle: .Alert)

alert.view.tintColor = UIColor.blackColor()
let loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(10, 5, 50, 50)) as UIActivityIndicatorView
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
loadingIndicator.startAnimating();

alert.view.addSubview(loadingIndicator)
presentViewController(alert, animated: true, completion: nil)

    self.performSegueWithIdentifier("openMainApp", sender: self)

dismissViewControllerAnimated(false, completion: nil)

然后我收到警告:

Warning: Attempt to present <app.TabController: 0x7ff6dc00bd40>  
on <app.ViewController: 0x7ff6d9cf6600> which is already presenting 
<UIAlertController: 0x7ff6d9d78530>

如何跳过此警告?

2 个答案:

答案 0 :(得分:0)

虽然这个警告的来源对我来说仍然是一个谜,但有一种方法可以跳过警告。

  1. 从故事板中删除segue
  2. 将故事板ID提供给您的视图控制器,例如:

    enter image description here

  3. 替换 self.performSegueWithIdentifier("openMainApp", sender: self)

    let viewController: UIViewController =
      self.storyboard!.instantiateViewControllerWithIdentifier("MainScene")
    self.presentViewController(viewController, animated: true, completion: nil)
    

答案 1 :(得分:0)

Idan的回答可能有效,但我建议您使用MBProgressHudSVProgressHud之类的内容。当您在解除警报控制器之前执行segue时,看起来swift并不喜欢它,因为它是它自己的视图控制器。 Here是如何实现MBProgressHud的。 Here是如何实现SVProgressHud的。如果您不想使用CocoaPods,只需下载zip文件并将.m和.h文件添加到项目中。