Swift添加可点击的tableview

Posted

技术标签:

【中文标题】Swift添加可点击的tableview【英文标题】:Swift adding clickable tableview 【发布时间】:2018-07-20 13:25:48 【问题描述】:

当我创建一个 tableview 时,我无法点击我放在 tableview 上的任何项目。我想知道如何创建一个可以单击每个项目的表格视图,并且当用户单击一个项目(例如城市名称)时,它将用户重定向到不同的视图控制器。 (例如如果tableview中有22个可点击的item,那么总共会有22个新的不同的viewcontrollers) 非常感谢您!

【问题讨论】:

你试过什么?你实现 UITableViewDelegate 了吗? 您需要使用tableView:didSelectRowAtIndexPath: 方法。如果您使用 Master Detail 模板启动一个新的 xcode 项目,那么样板代码就是这样做的。 这里是tableview的演示项目github.com/paresh1994/ProtocolDelegation- 【参考方案1】:

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 并相应地标记它们。然后,您可能希望根据在第三个函数中选择的行来调用每个单独的 segue!您可以使用 performSegue() 函数调用带有标识符的 segue。

请注意,包含这些函数的类必须是 UITableViewDataSource 类型,并且您应该在 ViewDidLoad() 函数中告诉表格视图它是数据源,如下所示:

tableView.dataSource = self

【讨论】:

【参考方案2】:

下面是一个简单的代码:

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 
    

【讨论】:

以上是关于Swift添加可点击的tableview的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 添加UIView后无法点击按钮

Swift在按钮点击上添加自定义单元格

你如何使情节提要上的 UIImageView 可点击(swift)

带有 Swift 的 TTTAttributedLabel 中的可点击链接

TTTAttributedLabel 可点击链接在 Swift 3 中不起作用

如何在 Swift 中制作一个单词可点击的 UITextView?