Как присвоить значение типа 'UIImage?' набрать 'UIView?' - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблемы с назначением "выбранных пользователем" изображений для tableViewCells и фонов просмотра таблиц. Я получаю сообщение об ошибке «Не удается присвоить значение типа« UIImage? » набрать 'UIView?'.

Fx. Когда я пишу следующее, чтобы попытаться получить изображение, которое выбрал пользователь, показанное в определенной ячейке:

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Diary1", for: indexPath)

    cell.textLabel?.text = allDiaries[indexPath.row].diaryName
    cell.detailTextLabel?.text = allDiaries[indexPath.row].diaryQuestion
    cell.backgroundView = UIImage(data: newDiary?.diaryTheme ?? Data())

    return cell
}

Также в другом месте я получаю такую ​​же ошибку при написании этого:

 override func viewDidLoad() {
    super.viewDidLoad()
    tableView.backgroundView = UIImage(data: (newDiary?.diaryTheme ?? Data()))
}

Итак, я думаю, что при работе с фонами tableView вы должны знать, как конвертировать из UIImageView в UIView.

Anybode знает, как это сделать?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Попробуйте использовать фоновый цвет и то же самое для изображения.

       tableView.backgroundView.backgroundcolor = color.patterneImage(UIImage(data: (newDiary?.diaryTheme ?? Data())))
0 голосов
/ 05 ноября 2018

Вам необходимо создать экземпляр UIImageView, содержащий UIImage, затем установить для этого imageView свойство backgroundView, которое будет работать, поскольку UIImageView является подклассом UIView.

let imageView = UIImageView(image: UIImage(data: (newDiary?.diaryTheme ?? Data())))
tableView.backgroundView = imageView

Затем сделайте то же самое в cellForRowAt (имейте в виду, что я изменил newDiary на allDiaries[indexPath.row], так как в противном случае вы получите одно и то же фоновое изображение для всех ячеек):

let imageView = UIImageView(image: UIImage(data: allDiaries[indexPath.row].diaryTheme)
cell.backgroundView = imageView
0 голосов
/ 05 ноября 2018

Попробуйте использовать свойство UIColor для установки backgroundColor из UIView.

public init(patternImage image: UIImage)

Код:

if let image = UIImage(data: newDiary?.diaryTheme ?? Data()) {
    tableView.backgroundView.backgroundColor = UIColor.init(patternImage: image)
}

В TableViewCell

if let image = UIImage(data: newDiary?.diaryTheme ?? Data()) {
    cell.backgroundView.backgroundColor = UIColor.init(patternImage: image)
}
0 голосов
/ 05 ноября 2018

Вы пытаетесь присвоить UIImage, а не UIImageView. Вы должны создать UIImageView с изображением, и тогда вы сможете установить его в качестве фона

cell.backgroundView = UIImageView(image:UIImage(data: newDiary?.diaryTheme ?? Data()))
...