Как добавить изображения [программно] в ячейки существующего tableView? - PullRequest
0 голосов
/ 11 мая 2019

Мне нужно добавить изображения в ячейки tableView с теми же именами, что и ячейки tableView. то есть ячейка «Boeing» использует изображение «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, значение: [String])» не может быть преобразован в «(_, _, _)», кортежи имеют другое число ... », «Определение противоречит предыдущему ...» @ линия: ,,, 'for (ключ, значение) в transportMeans {' ,,,

Ответы [ 3 ]

0 голосов
/ 12 мая 2019

Прежде всего, никогда не объявляют члены структуры как неявные развернутые необязательные. Если вам нужны опции, объявите их как обычные (?). Но в этом случае объявите их как необязательные и назовите структуру в единственном числе. Если члены структуры не будут изменены, вы даже можете объявить их как константу

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"}))
    }

}

0 голосов
/ 13 мая 2019

Если вы используете каждое изображение для каждого 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 и массива изображенийВы получили ошибку

Заполнитель редактора в исходном файле "," '(ключ: String, значение: [String])' не может быть преобразован в '(_, _, _)', кортежи имеютдругое число ... "," Определение конфликтует с предыдущим ... "@ line: ,,, 'for (ключ, значение) в transportMeans {' ,,,

0 голосов
/ 12 мая 2019

Ваш 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))
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...