当我创建一个表视图时,我不能点击我放在表视图上的任何项目。我想知道如何创建一个每个项目都可以点击的表视图,当用户点击一个项目(例如城市名称(时,它会将用户重定向到不同的视图控制器。(例如,如果表视图中有22个可单击项目,则总共会有22个新的不同视图控制器(提前非常感谢!
UITableViewDataSource必须包含三个主要函数,表视图才能与用户交互正常工作(例如,按每一行(。这些功能是:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
您要使用的函数是第三个。当用户在屏幕上点击某一行时,就会调用它。您可以使用"indexPath"查找行索引。
如果要转到22个不同的视图控制器,则需要在每个视图控制器之间创建一个手动分段,并相应地标记它们。然后,您需要根据在第三个函数中选择的行来调用每个单独的segue!您可以使用performSegue((函数调用带有标识符的segue。
请注意,包含这些函数的类必须是UITableViewDataSource类型,并且您应该告诉表视图它是ViewDidLoad((函数中的数据源,如下所示:
tableView.dataSource = self
以下是简单代码的样子:
import UIKit
class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var identifiers = [String]()
override func viewDidLoad() {
// fill your identifiers here
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return 22
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! yourCell
// fill your cell's data in here
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
// here you can use someThing like an array of your segue identifiers
self.performSegue(withIdentifier: identifiers[indexPath.row], sender: self)
//Or you can just implement a switch with every case doing what you want that cell to do which i don't recommend if you have 22 rows
}
}