在 swift 中的 tableviewcell 上以编程方式执行根 viewcontroller segue

perform a root viewcontroller segue programmatically on a tableviewcell in swift

下面的代码创建一个 tableviewcell 并在其中放置一个对象。将数据放入 tableviewcell 的代码不存在。我想要做的就是当用户点击 tableviewcell 时它会被转移到一个基本的视图控制器 class。无需展示如何返回。

   var itemName : [NSManagedObject] = []
var theField = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()


    theField.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
}
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let title = itemName[indexPath.row]
    let cell = theField.dequeueReusableCell(withIdentifier: "MyCell", for : indexPath)

    cell.selectionStyle = .default
    let attr1 = title.value(forKey: "name") as? String



    let text = [attr1].flatMap { [=12=] }.reduce("", +)
    cell.textLabel?.text = "\(text)"

    cell.textLabel?.textAlignment = .center

    cell.layoutMargins = UIEdgeInsets.zero




    cell.preservesSuperviewLayoutMargins = false
    cell.separatorInset = UIEdgeInsets.zero
    cell.layoutMargins = UIEdgeInsets.zero


    return cell

}

 @objc func moveRight() {

     //pass tableview cell
     let vce = fullScreen()
    vce.text = UITableViewCell




           vce.modalPresentationStyle = .overCurrentContext // actually .fullScreen would be better
           vce.present(vce, animated: true)}

您需要实施 UITableViewDelegate 协议。所以:

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { .. }
}

假设你有一个数组titles

cell.textLabel?.text = titles[indexPath.row]

然后在这个方法中进行操作:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)

    moveRight(titles[indexPath.row])

}

func moveRight(_ title:String) {
    //pass tableview cell
    let vc = fullScreen()
    vc.text = title
    self.navigationController!.pushViewController(vc, animated: true)        
}