通过单击swift中的TableView单元格转到ViewController

时间:2017-12-14 18:04:41

标签: ios swift xcode

有一个类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
}
}

您需要写什么才能转到Info Controller?

3 个答案:

答案 0 :(得分:3)

我假设你正在使用故事板。首先,您需要在两个viewcontrollers之间建立某种连接。您可以通过设置“segue”来完成此操作。按住ctrl +单击从第一个viewcontroller拖动到第二个viewcontroller。它看起来像这样:

Creating Segue

当你松开鼠标时,你会看到:

Creating Segue 2

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

Creating Segue 3

现在......你已经完成了故事板中你需要做的所有事情。现在,在MenuViewController中的实际代码中,您需要关联单击tableviewcell。您可以使用委托方法didSelectRowAt来完成此操作。

我看到你已经用这一行设置了委托: menuTableView.delegate = self

确保只要用户点击一行就会调用didSelectRowAt

所以现在你要做的就是编写执行segue的代码:

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

注意: 以下是有关与tableview行交互的更多信息: How to detect tableView cell touched or clicked in swift

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

您可以执行更多自定义操作...例如通过segue将数据传递到下一个viewcontroller。这是如何做: Pass data through segue

答案 1 :(得分:2)

implement UITableViewDelegate method


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)
    }

答案 2 :(得分:0)

  

只需添加一个   nextViewController.didMove(toParentViewController:self)里面的一个   " didSelectRowAt"下面给出的例子

这是List for tableview cell

  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)

            }
        }
    }

希望它有所帮助