【问题标题】:Swift 2.0 Presenting modal view over tableviewSwift 2.0 在表格视图上呈现模态视图
【发布时间】:2015-08-24 22:07:46
【问题描述】:

我有一个表格视图,我在其中点击披露按钮 (i) 以模态显示另一个视图。每次出现模态视图时,应用都会因此错误而崩溃;

NSInvalidArgumentException',原因:'应用程序试图呈现 模态的主动控制器

这是在 ExamTableView 上调用的;

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "showHTML" {
        let vc : HTMLViewController = segue.destinationViewController as! HTMLViewController
        vc.htmlFile = htmlFile
        presentViewController(vc, animated: true, completion: nil)
    }

它是通过点击 ExamTableView 中的按钮调用的;

    override func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
    let examListing = exams[indexPath.row]
     htmlFile = examListing.htmlFile!
    print("File: " + htmlFile)
    self .performSegueWithIdentifier("showHTML", sender: self)
}

当我得到 htmlFile 变量的打印时,我确实得到了新视图的 viewDidLoad。

    override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    print(htmlFile)
}

但一旦模态视图出现在屏幕上,应用就会崩溃。我可以看到它到达,但随后它消失了。 不用说,我是 Swift 新手,当然还有 Swift 2。

任何人都可以看到我做错了什么?

【问题讨论】:

  • presentViewController(vc, animated: true, completion: nil) 你的代码有问题,你不应该那样做,你再次呈现将通过 segue 呈现的同一个视图控制器

标签: ios swift2


【解决方案1】:

您不应该在 prepareForSegue 中调用 presentViewController,只需删除该行 self .performSegueWithIdentifier("showHTML", sender: self) 它会起作用 - 假设您在情节提要中正确设置了转场

在为 segue 做准备时,您应该通过传递相关参数来准备目标视图控制器。 PrepareForSegue 在转换发生之前被调用 - 假设 shouldPerformSegue 返回 true。 presentViewController 已经在prepareForSegue 完成后被隐式调用,手动触发它会导致你偶然发现的错误。

希望能帮到你

【讨论】:

  • 我从 prepareForSegue 中取出“presentViewController(vc, animated: true, completion: nil)”,一切都很好。谢谢 MarkHim。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多