我试图将一个按钮显示为餐厅食物的图像,并将其下方的按钮显示为包含该餐厅名称的文本标签,所有这些都在自定义表格视图单元格中。因此,当你向下滚动餐桌视图时,你会看到不同餐厅食物的图片以及图片下方的餐厅名称。我有一个用于此操作的XIB文件。
目前,我正在使用UIImage
来拍摄餐厅的图片,这是有效的,但我正在尝试使用一个带图像的按钮,这样我就可以在点击食物图片后制作@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)
}
并实现如下所示在视图控制器中从具有作为字符串的餐厅名称的阵列在每个表视图单元中显示不同的餐厅名称。
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)