有一个类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?
答案 0 :(得分:3)
我假设你正在使用故事板。首先,您需要在两个viewcontrollers之间建立某种连接。您可以通过设置“segue”来完成此操作。按住ctrl +单击从第一个viewcontroller拖动到第二个viewcontroller。它看起来像这样:
当你松开鼠标时,你会看到:
点击“显示”。现在你将创建一个segue。 现在你需要命名它。所以点击故事板中显示的segue。它基本上只是从菜单视图控制器到信息视图控制器的箭头。在右侧,您将看到一个可以命名的地方(给它一个标识符):
现在......你已经完成了故事板中你需要做的所有事情。现在,在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)
}
}
}
希望它有所帮助