如何以编程方式将不同单元格的不同图像添加到 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 函数中,您期望nameimage 作为参数,因此您必须在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

以编程方式将 UIButtons 添加到 UICollectionView 单元格的 uiimage

如何以编程方式在单元格内创建文本字段或标签?

UITableView 添加 WebView 和 ImageView 单元格