Изменение изображения в UITableViewCell с использованием сегментированного элемента управления в другом представлении

Как изменить изображение IBOutlet, установленное в UITableViewCell, с помощью сегментированного управления в другом контроллере представления с помощью Swift?

UITableViewCell.swift:

class UserCell: UITableViewCell {

    @IBOutlet var imageDisplayIcon: UIImageView!

ViewController:

@IBAction func btnClicked(sender: AnyObject) {

    if txtSex.selectedSegmentIndex == 0{

        var imagePicView: UserCell = UserCell()

        imagePicView.imageDisplayIcon.image = UIImage(named: "BoyIcon.png")

        //imageDisplay.image = UIImage(named: "BoyIcon.png")

        print("male")

    }

    if txtSex.selectedSegmentIndex == 1{


        var imagePicView: UserCell = UserCell()

        imagePicView.imageDisplayIcon.image = UIImage(named: "GirlIcon1.png")

        //imageDisplay.image = UIImage(named: "GirlIcon1.png")

        print("female")

    }

Я получаю сообщение об ошибке

"fatal error: unexpectedly found nil while unwrapping an Optional value."

Что я делаю??


person Jenita _Alice4Real    schedule 29.08.2016    source источник
comment
Есть ли tableView в вашем viewController добавленном ?, Если да, вам нужно изменить изображение в cellForRowAtIndexPath.   -  person Nirav D    schedule 29.08.2016


Ответы (3)


Я полагаю, у вас есть UITableView

1. Обновить данные таблицы в действии

@IBAction func btnClicked(sender: AnyObject) {
    tableView.reloadData()
}

2. Добавьте ячейку изображения в делегат источника данных таблицы

func tableView(_ tableView: UITableView,
    cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let imageName = txtSex.selectedSegmentIndex == 0 ? "BoyIcon.png" : "GirlIcon1.png"

    // Load your cell

    cell.imageDisplayIcon.image = UIImage(named: imageName)

    return cell
}
person Marco Santarossa    schedule 29.08.2016
comment
Действие @btnClicked не происходит в viewController для tableView. поэтому я думаю, что tableView, reloadData снова показывает ошибку. - person Jenita _Alice4Real; 29.08.2016
comment
@ Jenita_Alice4Real, если у вас есть tableView в другом контроллере просмотра, вы должны либо вызвать функцию этого контроллера просмотра, чтобы перезагрузить таблицу, либо предоставить tableview как общедоступное свойство. - person Marco Santarossa; 29.08.2016
comment
контроллер представления, в котором я написал код, не является представлением для моей таблицы. это другой вид, в котором пользователь должен выбирать между мужчиной и женщиной, чтобы изображение в ячейке соответственно изменялось. - person Jenita _Alice4Real; 29.08.2016
comment
Если представление сегмента находится в другом потоке, вы можете сохранить selectedSegmentIndex, и когда вы вернетесь в свое табличное представление, вы можете перезагрузить данные, используя сохраненное значение selectedSegmentIndex - person Marco Santarossa; 29.08.2016

Вы должны перезагрузить tableview в действии щелчка вашего сегмента после настройки представления изображения ячейки, чтобы оно повлияло на просмотр таблицы !!

И вам нужно соответственно управлять своим cellforrow. В вашем cellforrow методе источника данных должно быть условие, что если выбран мужской сегмент, то изображение должно быть мужским, и наоборот!

person Ketan Parmar    schedule 29.08.2016

Вы должны использовать «делегат» между UserCell и ViewController. Это лучший способ.

person AppHero2    schedule 29.08.2016