编辑为true或false时更改目标viewController

时间:2018-07-08 15:47:22

标签: swift xcode uitableview segue

用户添加了一个viewController,其中tableView包含所有俱乐部。用户可以使用tableViewCells功能对moverowat重新排序。如果他选择俱乐部,则他与俱乐部的所有成员一起进入tableView。现在,我想实现该功能,以转到另一个viewController处,他可以在其中编辑单元格的内容。

我已经创建了它,但是现在不起作用:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if tableViewClub.isEditing == true{
            self.navigationController?.pushViewController(EditClubViewController() as UIViewController, animated: true)}
        if tableViewClub.isEditing == false{
            self.navigationController?.pushViewController(MemberViewController() as UIViewController, animated: true)
        }
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if !tableViewClub.isEditing {
        guard let destination = segue.destination as? MemberViewController,
             let selectedRow = self.tableViewClub.indexPathForSelectedRow?.row else {
                return
        }

        destination.club = clubs[selectedRow]
        }}

tableView.isEditing时,将显示黑色背景的viewController。当!tableView.isEditing时,显示此错误:Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value。我认为这是因为我没有情节提要。但是,是否有可能与tableViewCell发生两次冲突?还是应该解决这个问题?

1 个答案:

答案 0 :(得分:1)

不要使用Interface Builder的segue。手动实例化目标视图控制器,以便您可以控制要转换到的目标控制器:

界面生成器

选择EditClubViewController并为其指定一个情节提要ID。对MemberViewController做同样的事情。

enter image description here

在代码中

在第一个视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()
    // Turn this on so rows can be tapped during editing mode
    tableView.allowsSelectionDuringEditing = true
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let destinationVC: UIViewController

    switch tableView.isEditing {
    case true:
        // If your storyboard isn't named "Main.storyboard" then put the actual name here
        let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "editClubViewController") as! EditClubViewController
        // do your setup....
        destinationVC = vc
    case false:
        let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "memberViewController") as! MemberViewController
        // do your setup...
        destinationVC = vc
    }
    self.navigationController?.pushViewController(destinationVC, animated: true)
}