Swift中带有按钮的UITableViewCell [重复]

Posted

技术标签:

【中文标题】Swift中带有按钮的UITableViewCell [重复]【英文标题】:UITableViewCell with button inside in Swift [duplicate] 【发布时间】:2021-03-14 13:34:10 【问题描述】:

我有一个带有单元格的 UITableView,每个单元格都有产品信息、产品名称和产品 ID。每个单元格都有一个按钮,可将您带到另一个屏幕,其中包含产品的更多详细信息。 我的问题是,当我选择一个单元格时,由于didSelectRowAtIndexPath,我已经获得了属于所选单元格的产品的名称和ID,但是当我触摸单元格内的按钮时,我没有触发didSelectRowAtIndexPath,我不能获取产品的 id,因此我无法进入下一个屏幕并显示与所选产品相关的信息。 我能做什么?

【问题讨论】:

您可以从按钮添加一个 IBAction 到单元格,并添加一个将由您的视图控制器实现的协议(这也确认UITableViewDelegate)该协议可以有一个方法,该方法将被调用单元格实例,在点击按钮时,您可以通过传递 self 在委托上触发此方法,最后一旦您有了单元格,您就可以通过使用 indexPath(for: 并传递您收到的单元格实例来获得索引路径,一旦您拥有索引路径而不是 @ 中的代码987654323@ 这可以是一样的,事实上你可以把它移到一个函数中并从两个方法中调用它们 如果您可以编辑问题并添加 cellForRowAtIndexPathdidSelectRowAtIndexPath 实现,以及可能的单元格代码,我们可以更好地帮助您 【参考方案1】:

我会问你哪些有助于解决这个问题的问题是:

您是否使用IBAction 转换为按钮的动作触发器?

如果是,则 IBAction 将位于 UITableViewCell 下,其中应包含 IBOutlet 用于保存名称、id 和产品信息值的 UILabels

例如:

class SampleCell: UITableViewCell 
  @IBOutlet var nameLabel: UILabel!
  @IBOutlet var idLabel: UILabel!
  @IBOutlet var informationLabel: UILabel!


 @IBAction func action(button: UIButton) 
     // you can obtain your information once the button is triggered before navigating

     let id = self.idLabel.text
     let name = self.nameLabel.text
     let information = self.informationLabel.text
     
    // navigate to new screen using delegate protocols
 

如果你没有使用如下的 IBOutlets 和 IBActions,那么我建议你使用它们,并为产品单元格创建一个自定义的 TableViewCell。这是访问您的手机信息的最简单方法

【讨论】:

以上是关于Swift中带有按钮的UITableViewCell [重复]的主要内容,如果未能解决你的问题,请参考以下文章

UITableView Swift中带有布尔值的切换按钮

swift Swift中带有协议的构建器模式示例

Swift 中带有选择器的协议扩展

Swift 中带有 tableView 或 TableViewController 的 UIViewController

Swift 中带有过滤器的高级 Firebase 查询

在 Swift 中带有变量的 NSLocalizedString 不起作用