storyboard?.instantiateViewController(withIdentifier:“”)as!视图 - 控制

时间:2017-09-19 08:50:35

标签: ios swift uitableview

我在自定义导航栏中有一个菜单表视图。如果我点击一个单元格,它应该带我到另一个视图控制器。但是当我点击它时我的应用程序崩溃了。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return menu_items.count  //It has 5 values
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "cell")

    cell.textLabel?.text = menu_items[indexPath.row]
    cell.textLabel?.textColor = .white

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


    let item = menu_items[indexPath.row]

    if (item == "Patienten") {


         tableView.removeFromSuperview()

        let vc =  self.storyboard?.instantiateViewController(withIdentifier: "patientView") as! patientViewVC //App crashes here
        self.present(vc, animated: false, completion: nil)

    } else if (item == "Mitarbeiter") {


    } else if (item == "Kalender") {


    } else if (item == "Tourenplanung") {


       tableView.removeFromSuperview()

        let vc =  storyboard?.instantiateViewController(withIdentifier: "tour") as! tourVC //App crashes here
        self.present(vc, animated: false, completion: nil)


    }else if (item == "Abmelden") {

        let vc = self.storyboard?.instantiateViewController(withIdentifier: "loginvc") as! LoginVC  //App crashes here
        self.present(vc, animated: false, completion: nil)
    }


    let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
    selectedCell.contentView.backgroundColor = colorLightGreen

}

}

我多次验证所有标识符名称和视图控制器名称是否正确。

2 个答案:

答案 0 :(得分:0)

故事板中的视图控制器需要在Identity检查器中设置自定义类:

enter image description here

然后你可以把它投射到所需的类型。如果所有视图控制器都在同一个故事板中,则可以使用self的storyboard属性对它们进行实例化。如果它们位于不同的故事板中,则必须使用相应的名称实例化UIStoryboard实例并使用它。

顺便说一句,你为什么在选择小区后调用tableView.removeFromSuperview()

答案 1 :(得分:0)

确保在实例化viewController之前加载正确的故事板。

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = menu_items[indexPath.row]

    if (item == "Patienten") {
        tableView.removeFromSuperview()

        let storyBoard = UIStoryboard(name: "StoryboardName", bundle: nil)
        let vc =  storyBoard.instantiateViewController(withIdentifier: "patientView") as! patientViewVC
        self.present(vc, animated: false, completion: nil)

    } else if (item == "Mitarbeiter") {


    } else if (item == "Kalender") {


    } else if (item == "Tourenplanung") {


        tableView.removeFromSuperview()
        let storyBoard = UIStoryboard(name: "StoryboardName", bundle: nil)
        let vc =  storyBoard.instantiateViewController(withIdentifier: "tour") as! tourVC //App crashes here
        self.present(vc, animated: false, completion: nil)


    }else if (item == "Abmelden") {
        let storyBoard = UIStoryboard(name: "StoryboardName", bundle: nil)
        let vc = storyBoard.instantiateViewController(withIdentifier: "loginvc") as! LoginVC  //App crashes here
        self.present(vc, animated: false, completion: nil)
    }


    let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
    selectedCell.contentView.backgroundColor = colorLightGreen

}

上面的StoryboardName是包含patientViewVC,tourVC,LoginVC的故事板的名称

相关问题