通过在SWIFT中单击TableView单元格来转到视图控制器

dnph8jn4  于 2022-10-04  发布在  Swift
关注(0)|答案(3)|浏览(146)

有一个类MenuViewController,其中记录了表中记录的数组:

import Foundation
import UIKit

class MenuViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var menuTableView: UITableView!

let myTitle = ["Помощь", "Информация", "Поддержка"]

override func viewDidLoad() {
    super.viewDidLoad()

    menuTableView.delegate = self
    menuTableView.dataSource = self
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = menuTableView.dequeueReusableCell(withIdentifier: "MenuCell") as! MenuTableViewCell
    cell.labelText.text = myTitle[indexPath.row]
    return cell
}
}

您需要在其中写入什么内容才能转到信息控制器?

cnjp1d6j

cnjp1d6j1#

我假设您使用的是故事板。首先,您需要在两个视图控制器之间设置某种类型的连接。你可以通过设置一个“段”来做到这一点。按住Ctrl键并单击,从第一个视点控制器拖动到第二个视点控制器。它看起来是这样的:

当您松开鼠标时,您将看到以下内容:

点击Show(显示)。现在,您将创建一个Segue。现在你需要给它起个名字。因此,点击故事板中显示的片段。它基本上只是一个从菜单视图控制器到信息视图控制器的箭头。在右侧,您将看到一个地方,您可以在其中命名它(给它一个标识符):

现在..。。你已经完成了你在故事板中需要做的所有事情。现在,在MenuView控制器中的实际代码中,您需要关联单击表视图单元格。您可以使用委托方法didSelectRowAt来执行此操作。

我看到您已经使用以下行设置了委托:menuTableView.delegate = self

这确保了每当用户点击一行时都会调用didSelectRowAt

因此,现在您要做的是编写代码来执行段:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "YourSegueName", sender: self)
}

注意:以下是有关与表视图行How to detect tableView cell touched or clicked in swift交互的详细信息

以下是有关segues的更多信息:IOS - How to segue programmatically using swift

您可以进行更多的定制...例如通过segues将数据传递到下一个视点控制器。方法如下:Pass data through segue

elcex8rz

elcex8rz2#

实现UITableViewDelegate方法:

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

       //To InfoViewController I am considering you have created InfoViewController with XIB 
       let controller = InfoViewController(nibName: "YourNibName", bundle: nil)

        //Present Your Controller
        self.present(controller, animated: true) {
        }              

        //Push Your controller if your view is already part of NavigationController stack
        self.navigationController?.pushViewController(controller, animated: true)
    }
xmakbtuz

xmakbtuz3#

只需添加一个
“didSelectRowAt”中的nextViewController.didMove(toParentViewController: self)。下面给出了一个例子。

这是用于列出表视图单元格的:

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

        let cellIdentifier = "cell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! PatientFamilyDetailTableViewCell
        cell.txt_patientName.text = patientname[indexPath.row]

        // Configure the cell...

        return cell
    }

现在,它用于选择表视图单元格:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) {
            if cell.isSelected {

                let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
                let nextViewController = storyBoard.instantiateViewController(withIdentifier: "medtestmain") as! medTest
            patient_id = relation[indexPath.row]
            patient_name = patientname[indexPath.row]
            UserDefaults.standard.set(patient_id, forKey: "patient_id")
            UserDefaults.standard.set(patient_name, forKey: "patient_name")
                self.addChildViewController(nextViewController)
                nextViewController.view.frame = self.view.frame
                self.view.addSubview(nextViewController.view)
                nextViewController.didMove(toParentViewController: self)

            }
        }
    }

相关问题