如果单击表 ViewController 的单元格,则打开 ViewController

Open a ViewController if a cell of a TableViewController is clicked

我正在尝试以编程方式创建一个视图控制器,如果单击 table 上的单元格,它将打开。我正在使用 table 视图,并用 xib.So 填充它,我被困在从第一个视图控制器中引用新视图控制器的位置,单击在table 通过 xib 查看。

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "DViewController") as? DViewController
    self.navigationController?.present(vc!, animated: true, completion: nil) //present della view successiva
    vc?.name = data[indexPath.row].nome
    
}

此代码允许我单击该行,但单击时显示错误“致命错误:在展开可选值时意外发现 nil”显然是从 self.navigationController?.present(vc!...vc 值结果为零,我不明白为什么。 这是我想在单击时打开的 ViewController,它唯一要做的就是打开并将图块更改为我在另一个 ViewController 中单击的单元格的名称

class DViewController: UITableViewController {

var name = ""

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.title = "\(name)"
}

}

有人可以帮忙吗?我是 swift 的新手...ty

根据你提到的。您可以在没有 stroyboard 的情况下初始化您的 viewController,并且不会再发生崩溃。

let vc = DViewController()

如果你像你所做的那样展示你的视图控制器,它不会显示你想要的标题。 要显示标题,您可以通过两种方式:

使用推送样式显示您的新视图控制器:

let vc = DViewController() 
navigationController?.pushViewController(vc, animated: true)

继续使用呈现样式,但您需要将视图控制器包装在其他导航控制器中:

let vc = DViewController()
let nav = UINavigationController(rootViewController: vc)
navigationController?.present(nav, animated: true)