如何在 TableViewCell.swift 文件中配置包含图像的按钮,并实现在每个 table 视图单元格中显示不同的图像?

How to configure a button containing an image in TableViewCell.swift file, and implement showing different images in each table view cell?

我正在尝试将一个按钮显示为餐厅运行t 食物的图像,并将其下方的按钮显示为包含该餐厅名称的文本标签运行t 所有这些都在自定义 table查看单元格。因此,当您向下滚动 table 视图时,您会看到不同餐厅运行t 食物的图片以及图片下方的餐厅名称运行t。我有一个正在使用的 XIB 文件。

目前,我正在使用 UIImage 来制作餐厅的图片 运行ts,这很有效,但我正在尝试使用带有图片的按钮,这样我就可以在点击按钮的食物图片后制作一个@IBAction

我在 TableViewCell.swift 文件中配置了一个显示餐厅名称的按钮,如下所示(标签在 运行 时显示):

TableViewCell.swift代码:

@IBOutlet var labelButton: UIButton!

//For retaining title in a property for IBAction use.
private var title: String = ""

func configureLabelButton(with title: String) {
        self.title = title //For retaining title in a property for IBAction use.
        labelButton.setTitle(title, for: .normal)
}

并实现了在每个 table 视图单元格中显示不同的 restau运行t 名称,其中 restau运行t 名称在视图控制器中作为字符串显示在数组中,如下所示。

ViewController.swift代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "RestaurantTableViewCell", for: indexPath) as! RestaurantTableViewCell

    cell.configureLabelButton(with: myData[indexPath.row])

    return cell
}

我正在尝试做同样的事情来在按钮中显示图像。我有一组用于相同目的的图像,称为 myImages。这是我目前的代码,但是当 运行.

时它不起作用

TableViewCell.swift代码:

@IBOutlet var imageButton: UIButton!

//For retaining image in a property for IBAction use.
private var image: UIImage = UIImage()

func configureImageButton(with image: UIImage) {
    self.image = image //For retaining image in a property for IBAction use.
    imageButton.setImage(image, for: .normal)
}

ViewController.swift代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "RestaurantTableViewCell", for: indexPath) as! RestaurantTableViewCell

    cell.configureImageButton(with: myImages[indexPath.row]!)
    cell.imageButton.contentMode = .scaleAspectFill
    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 185
}

我认为我的错误在 TableViewCell.swift 的某处。我想我没有正确的代码,可能在 ViewController.swift.

我认为 UIImage 数组声明有问题,问题可能是它没有从数组中获取图像。

试试这个

 var arrImg : [UIImage] = [UIImage(named: "res-1")!,UIImage(named: "res-2")!,UIImage(named: "res-3")!]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RestaurantTableViewCell", for: indexPath) as! RestaurantTableViewCell
        cell.configureImageButton(with: arrImg[indexPath.row])
        cell.btnResturant.contentMode = .scaleAspectFill
        cell.configureLabel(with: arrRes[indexPath.row])
        cell.layoutIfNeeded()
        cell.selectionStyle = .none
        cell.layoutIfNeeded()
        return cell
    }

找到了我的问题的答案。 TableView.swift 中的语法错误。这可能是由于 Swift 更新。

是:

imageButton.setImage(image, for: .normal)

应该是:

imageButton.setBackgroundImage(image, for: .normal)