如何以编程方式将图像添加到现有tableView的单元格中?

时间:2019-05-11 07:37:14

标签: ios swift uitableview

我需要将图像添加到与tableView单元格相同名称的tableView单元格中。即“波音”单元格使用“ Boeing.png”图片。有些图像是.jpg格式。

我尝试以与节和行布局相同的方式添加图像数组。图片与单元格名称相同。我已在尝试进行更改的地方添加了注释(#1-4)。这应该很简单,但是我看不到我所缺少的。

import UIKit

class NewTableViewController: UITableViewController {

        let  transportMeans = ["Cars" : ["Ferrari", "Chrysler", "Toyota"], "Trains" : ["Steam", "Diesel", "Electric"], "Planes" : ["AirBus", "Boeing", "Cessna"]]
    // #1 added a line for images to be applied:
        var transportImages =   ["Cars" : ["Ferrari.png", "Chrysler.png","Toyota.png"], "Trains" : ["Steam.png","Diesel.png","Electric.png"], "Planes" : ["AirBus.jpg","Boeing.jpg","Cessna.png"]]
        var selectedFileName = ""

        struct Objects {

            var sectionName : String!
            var sectionObjects : [String]!
    //#2 added a line for images:
            var transportImages : String!
        }

        var objectArray = [Objects]()


        override func viewDidLoad() {
            super.viewDidLoad()
    // #3 added term 'value' to key:

            for (key, value, value) in transportMeans {
                print("\(key) -> \(value) -> \(value)")
    //#4 added a line for 'transportImages' in the append section-------:
                objectArray.append(Objects(sectionName: key, sectionObjects: value, transportImages: value))
            }


        }



此代码中出现的错误是:

  

“源文件中的编辑器占位符”,“'((键:字符串,值:[String])'不能转换为'(_,_,_)',元组的数目不同...”, “定义与先前的...冲突”   @行:   、、、   “用于transportMeans {(键,值)   、、

3 个答案:

答案 0 :(得分:0)

您的transportMeans的类型为:[String : [String]]。因此,在for循环中,您应该执行以下操作:

    for (key, value) in transportMeans {
        print("\(key) -> \(value) -> \(value)")
        //#4 added a line for 'transportImages' in the append section-------:
        objectArray.append(Objects(sectionName: key, sectionObjects: value, transportImages: key))
    }

答案 1 :(得分:0)

首先,从不将结构成员声明为隐式未包装的可选成员。如果需要可选项,则将其声明为常规可选项(?)。但是在这种情况下,请将它们声明为非可选,并以单数形式命名该结构。如果结构成员不被修改,您甚至可以将它们声明为常量

struct Object {
    let sectionName : String
    let sectionObjects : [String]
    let transportImages : String
}

var objectArray = [Object]()

您正在枚举字典,而不是元组。只有一个key和一个value。并且,如果图像名称与公司名称匹配,则实际上不需要transportImages数组。

var transportImages =   ["Cars" : ["Ferrari.png", "Chrysler.png","Toyota.png"], "Trains" : ["Steam.png","Diesel.png","Electric.png"], "Planes" : ["AirBus.jpg","Boeing.jpg","Cessna.png"]]

只需将.png扩展名添加到map

override func viewDidLoad() {
    super.viewDidLoad()

    for (key, value) in transportMeans {
        objectArray.append(Object(sectionName: key, sectionObjects: value, transportImages: value.map{$0 + ".png"}))
    }

}

答案 2 :(得分:0)

如果每个PDF使用每个图像,则声明如下

struct Objects {

    var sectionName : String!
    var sectionObjects : [String]!
    var sectionImages : [String]!

}

并为像belo这样的单元分配

    cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row]
    cell.imageView?.image = UIImage(named: objectArray[indexPath.section].sectionImages[indexPath.row])

由于您对struct var和image数组使用了相同的名称,因此出现错误

  

源文件中的编辑器占位符”,“'((键:字符串,值:[字符串])'   不能转换为'(_,_,_)',元组的编号不同   的...”,“定义与先前的...冲突” @行:、、、'for   (键,值)在transportMeans {',,