如何从视图控制器中呈现位于“主”故事板中的视图控制器,该视图控制器不在故事板中但是以编程方式创建?

时间:2017-10-28 21:42:40

标签: ios swift xcode uiviewcontroller storyboard

我正在创建一个包含多个不同民意调查的民意调查应用程序。为此,我在故事板中创建了一个名为PollSelectorTableViewController的视图控制器。它看起来像这样:

enter image description here

它是一个静态表格单元格,当我按下它时,它会转换为SubPollsTableViewController。然而,这不是故事板的一部分。

这是SubPollsTableViewController中的代码(不包括我遇到问题的地方)并且它完美运行:

import UIKit

class SubPollsTableViewController: UITableViewController {
var polls:[String]
static var pollSelectOptions:[String] = [""]

let blueColor = UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
let redColor = UIColor(red: 1.0, green: 41.0/255.0, blue: 0.0, alpha: 1.0)

init(setPolls:[String]){
    self.polls = setPolls
    print(self.polls)
    super.init(style: .plain)
}


required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return polls.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print(indexPath)
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
    if (indexPath.row == 0){
        cell.textLabel?.text = polls[indexPath.row]
        cell.textLabel?.font = cell.textLabel?.font.withSize(50.0)
        cell.textLabel?.textAlignment = NSTextAlignment.center
    }
    else if (indexPath.row == (polls.count - 1)){
        cell.textLabel?.text = polls[indexPath.row]
        cell.textLabel?.textColor = redColor
        cell.textLabel?.font = cell.textLabel?.font.withSize(25.0)
        cell.textLabel?.textAlignment = NSTextAlignment.center

    }
    else{
        cell.textLabel?.text = polls[indexPath.row]
        cell.textLabel?.textColor = blueColor
        cell.textLabel?.font = cell.textLabel?.font.withSize(21.0)
        cell.textLabel?.textAlignment = NSTextAlignment.center

    }
    return cell
}

*请注意代码未完成

从这里开始,我尝试在单击单元格时将其更改为我在故事板中定义的视图控制器(名为PollViewController)。这是View Controller的图像:

Poll View Controller

我尝试让它发挥作用的是:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print (indexPath)
    if(polls[indexPath.row] == "Background Checks"){
        print("Background Checks Accessed")
        SubPollsTableViewController.pollSelectOptions = ["Increase Drastically","Increase Slightly","Stay the Same","Decrease Slightly","Decrease Drastically"]
        actioncall()
    }
    }

    func actioncall() {

    if let PVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PollViewController") as? PollViewController {
        PVC.selectOptions = SubPollsTableViewController.pollSelectOptions
        self.present(PVC, animated: true, completion: nil)
    }
    }

这应该导致SubPollsTableViewController更改为PollViewController,而是我的异常断点将其停止在

    self.present(PVC, animated: true, completion: nil)

让它运行无论如何都会出现“libc ++ abi.dylib:以NSException类型的未捕获异常终止”

为什么我收到此错误?如何解决此问题以便切换? PollViewController中的文本顺便说一下就是占位符文本。我从Stack Exchange内外的几个不同来源获得了代码,但它仍然无效。

1 个答案:

答案 0 :(得分:1)

显示PollViewController的代码是正确的,这种类型的异常与插座连接有关,因此您可以验证您的插座是否在PollViewController中正确连接。