Swift 2.0在tableview上呈现模态视图

时间:2015-08-24 13:54:48

标签: ios swift2

我有一个tableview,我点击公开按钮(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)
}

我得到了新视图的viewDidLoad,因为我得到了htmlFile变量的打印。

    override func viewDidLoad() {
    super.viewDidLoad()

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

但是一旦模态视图落在屏幕上,应用就崩溃了。我可以看到它到了,但它已经消失了。 毋庸置疑,我是Swift的新手,当然还有Swift 2。

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

1 个答案:

答案 0 :(得分:2)

您不应该在prepareForSegue中调用presentViewController,只需删除该行即可 self .performSegueWithIdentifier("showHTML", sender: self) 它会起作用 - 假设您在故事板中正确设置了segue

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

希望我能提供帮助