如何以编程方式将不同单元格的不同图像添加到 tableView (Swift 3)
Posted
技术标签:
【中文标题】如何以编程方式将不同单元格的不同图像添加到 tableView (Swift 3)【英文标题】:How to add different images for different cell to a tableView programmatically (Swift 3) 【发布时间】:2017-11-07 14:34:21 【问题描述】:我正在尝试向 tableView 中的不同单元格添加不同的图像,其中我已经有一个字符串列表,这是我的代码,类别结构:
struct QCategoryy
var name:String
var image:UIImage
var isSelected = false
init(name:String, image:UIImage)
self.name = name
self.image = image
extension QCategoryy: ExpressibleByStringLiteral
init(stringLiteral value: String)
self.name = value
init(unicodeScalarLiteral value: String)
self.init(name: value)
init(extendedGraphemeClusterLiteral value: String)
self.init(name: value)
这里是我创建列表的地方(然后我将添加到 tableView)
import Foundation
import UIKit
import CoreLocation
import Alamofire
class NearbyPlaces
static func getCategories() -> [QCategoryy]
let list:[QCategoryy] = [QCategoryy(name: "Art_gallery", image: UIImage(named: "art_button.png")!), QCategoryy(name: "Bar", image: UIImage(named: "bar_button.png")!), QCategoryy(name :"Night_club", image: UIImage(named: "nightclub_button.png")!), QCategoryy(name: "Movie_theater", image: UIImage(named: "cinema_button.png")!), QCategoryy(name: "Restaurant", image: UIImage(named: "restaurant_button.png")!), QCategoryy(name: "Gym", image: UIImage(named: "gym_button.png")!), QCategoryy(name: "Spa", image: UIImage(named: "spa_button.png")!), QCategoryy(name: "Museum", image: UIImage(named: "museum_button.png")!)]
return list
最后我将它添加到 tableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let identifier = "CATEGORY_CELL"
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath)
let selectedIndexPaths = tableView.indexPathsForSelectedRows
let rowIsSelected = selectedIndexPaths != nil && selectedIndexPaths!.contains(indexPath)
/* cell.accessoryType = rowIsSelected ? .checkmark : .none */
cell.accessoryType = list[indexPath.row].isSelected ? .checkmark : .none
cell.textLabel?.text = list[indexPath.row].name
cell.imageView?.image = list[indexPath.row].image
return cell
我的问题是,在我决定添加图像之后,我在结构中添加了图像var image:UIImage
我得到了QCategoryy
的扩展名
在self.init(name: value)
行出现错误:参数标签“(名称:)”与任何可用的重载都不匹配。我该怎么做才能解决这个问题?我的目标只是能够将图像添加到 tableView 的不同单元格(显然与正确的名称相关联)。
【问题讨论】:
【参考方案1】:我认为您的错误可能是因为您的 var isSelected
正在初始化,但其他变量没有。因此,您可能希望在每个人的声明中对其进行初始化,如下所示:
struct QCategoryy
var name = ""
var image = UIImage()
var isSelected = false
或者像这样:
struct QCategoryy
var name:String
var image:UIImage
var isSelected: Bool
init(name:String, image:UIImage, isSelected: Bool)
self.name = name
self.image = image
self.isSelected = isSelected
当你声明这些变量时,你既没有初始化name
也没有初始化image
,你必须以某种方式初始化它们。
在结构中的init
函数中,您期望name
和image
作为参数,因此您必须在init
调用中将它们添加到extension
中,并且您还需要初始化您的image
变量
extension QCategoryy: ExpressibleByStringLiteral
init(stringLiteral value: String)
self.name = value
self.image = UIImage()
init(unicodeScalarLiteral value: String)
self.init(name: value, image: UIImage())
init(extendedGraphemeClusterLiteral value: String)
self.init(name: value, image: UIImage())
【讨论】:
我不太明白你为什么需要那个扩展,你能解释一下它为什么存在吗? 我在没有extension
的 Playground 中运行了代码 sn-p,它按预期工作。检查我编辑的答案
是的,但我需要扩展程序才能使用 swiftyJSON 和其他我需要根据特定类别研究地点的框架,所以我无法删除它,在我添加图像之前代码可以完美运行是在那之后我得到这个错误
好的,我添加了extension
,我想我解决了你的问题,检查我编辑的答案以上是关于如何以编程方式将不同单元格的不同图像添加到 tableView (Swift 3)的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式将 UIImageViews 添加到 UITableViewCell
如何以编程方式将约束添加到 tableView 单元格的默认 textLabel 和 accessoryView
如何以编程方式将约束添加到tableView单元格的默认textLabel和accessoryView