【问题标题】:Favourite Button in UITableview (Swift 4)UITableview 中的收藏按钮(Swift 4)
【发布时间】:2024-01-13 03:20:01
【问题描述】:

对于我的应用程序,我创建了一个自定义 UITableView,其中还包含一个按钮。我想将此按钮用作“标记为收藏”按钮。

因此,我将其写入我的 UITableViewCell 的 swift-File 中:

@IBAction func markedButtonPressed(_ sender: Any) {

    var objectToBeAdded: myStruct = data(data1: test, data2: test)
    if objectIsInArray(list: firmeninformation){
        markedButton.setImage(#imageLiteral(resourceName: "star blanc"), for: UIControlState.normal)}

    else{
        markedButton.setImage(#imageLiteral(resourceName: "star marked"), for: UIControlState.normal)
        favArray.append(firmeninformation)
    }
}

我认为这不是最好的方法,因为如果我过滤我的 TableView,“标记为收藏”的单元格的位置保持不变。因此,如果我标记第一个 Cell 然后过滤我的 TableView,第一个 Cell 总是“标记为收藏”。对更好的解决方案有什么建议吗?

【问题讨论】:

  • 每个单元格都需要有收藏按钮吗?如果是这样,则创建一个自定义单元格并让该单元格包含收藏按钮。在tableView:cellForRowAt: 中从您的模型(数组或某些数据源)中读取并设置收藏按钮是否突出显示。在您的单元格中为按钮设置正常和突出显示的图像
  • 是的,每个单元格都应该有一个收藏按钮。我已经创建了一个包含 UIButton 的 TableViewCell。但是我怎样才能从一个特定的单元格中处理一个函数(比如“设置突出显示的图像”)。
  • 如果可以点按整个单元格以标记为收藏,那么您可以识别从tableView:didSelectRowAt 点按的单元格,否则使用按钮的目标和选择器。在选择器中,按下的按钮将作为参数传递。在函数中,识别let location = button.convert(button.frame, to: tableView)然后let indexPath = tableView.indexPathsForRows(in: location)?.first按下的按钮的indexPath
  • 好的,谢谢,我试试看

标签: swift uitableview uibutton


【解决方案1】:

你的项目最好的方式,所以我只是建议你应该自定义一个 UIButton 来让它自己处理状态。

【讨论】: