Отслеживание выбранного состояния UIBarButtonItem?

Есть ли способ выделить (т. е. переключить) UIBarButtonItem без использования пользовательского представления?

Например, см. кнопку 3D в приложении Карты:

Приложение

или Перемешать все в приложении Музыка:

Музыкальное приложение


person romaonthego    schedule 06.01.2014    source источник
comment
возможный дубликат программно выделить UIBarButtonItem   -  person nemesis    schedule 07.01.2014
comment
Посмотрите мой ответ в основном на тот же вопрос здесь: in-ios" title="как установить uibarbuttonitem для выбранного или выделенного изображения или цвета оттенка в ios"> stackoverflow.com/questions/19320847/   -  person Kevin_TA    schedule 22.05.2015


Ответы (2)


Вы можете установить фоновое изображение для UIBarButtonItem:

item.setBackgroundImage(UIImage(named: "item-bg.png"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

Затем, когда вы хотите отменить выбор, установите фоновое изображение на nil:

item.setBackgroundImage(nil, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

(Вы должны создать файл изображения для фона)

person Jeffrey Sun    schedule 26.10.2014

Проблема в том, что хотя UIControl имеет свойство isSelected, которое достигает этой цели, UIBarButtonItem не наследуется от него, поэтому вы не можете привести его и установить значение. Однако я обнаружил странный обходной путь. Если вы установите тип sender действия кнопки как UIControl, он будет рассматриваться как полноценный UIControl, и вы можете установить isSelected.

Например:

    @objc func showContentsView(_ sender: UIControl) { 
        sender.isSelected.toggle()
    }

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

var selectedControl: UIControl?

Установите значение selectedControl в своем действии и установите его на nil при отмене выбора.

person UncommentedCode    schedule 02.07.2020
comment
Интересно, но, к сожалению, не очень безопасно для будущего. - person Koen.; 12.10.2020