Кнопка ячейки табличного представления, изменение изображения кнопки после нажатия - PullRequest
0 голосов
/ 06 июля 2018

В настоящее время в моем проекте есть контроллер табличного представления с кнопкой и текстом в каждой строке. У меня проблема с выяснением, как изменить изображение кнопки в определенной строке после нажатия кнопки. У меня уже есть функция «переопределить func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)», работающая, чтобы перевести мое приложение в новое представление. Мне нужна кнопка (при нажатии), чтобы добавить данные из определенной строки в переменную избранного. Который затем будет отображаться на другом экране. Моя кнопка не меняет вид.

В настоящее время у меня есть функция события кнопки, которая вызывается при каждом нажатии кнопки в ряду. Проблема, с которой я столкнулся, заключается в том, что я понятия не имею, как получить доступ к конкретной кнопке в ряду, который был нажат, и изменить только изображение этой кнопки.

Вот мой код:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell

    // Setting Text and images
    cell.batchName.text = processes[indexPath.item].batch_name
    cell.startTime.text = processes[indexPath.item].starttime
    cell.endTime.text = processes[indexPath.item].endtime
    cell.slaTime.text = processes[indexPath.item].SLA
    var statusColor = UIColor.black

    // Calling Button event function
    cell.starButton.addTarget(self, action: #selector(favoriteStarClicked), for: UIControlEvents.touchUpInside)

    return cell
}

@IBAction func favoriteStarClicked(_ sender: Any) {

    // Need to change the image of the button that was clicked 
}

1 Ответ

0 голосов
/ 06 июля 2018

Современный способ Swift - закрытие обратного вызова

  • В модели добавьте свойство для избранного состояния

    var isFavorite = false
    
  • В Интерфейсном Разработчике выберите кнопку в пользовательской ячейке и нажмите ⌥⌘4 , чтобы перейти к Инспектору Атрибутов. Во всплывающем меню State Config выберите Selected, затем выберите изображение star во всплывающем окне Image (оставьте изображение для состояния Default пустым).

  • В пользовательской ячейке добавьте свойство callback и действие для кнопки (подключите ее к кнопке). Изображение устанавливается через свойство isSelected кнопки

    var callback : (()->())?
    
    @IBAction func push(_ sender: UIButton) {
        callback?()
    }
    
  • В cellForRow установите изображение в зависимости от isFavorite и добавьте обратный вызов

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    
        // Setting Text and images
        cell.batchName.text = processes[indexPath.item].batch_name
        cell.startTime.text = processes[indexPath.item].starttime
        cell.endTime.text = processes[indexPath.item].endtime
        cell.slaTime.text = processes[indexPath.item].SLA
        var statusColor = UIColor.black
        let item = processes[indexPath.row]
        cell.button.isSelected = item.isFavorite
        cell.callback = {
            item.isFavorite = !item.isFavorite
            cell.button.isSelected = item.isFavorite
        }
    
        return cell
    }
    

Обратный вызов обновляет модель и изображение в ячейке


  • Нет протокола / делегата.
  • Нет пользовательских целей / действий.
  • Нет тегов.
  • Нет индексных путей.
  • Математика без рамки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...