Есть ли способ выделить (т. е. переключить) UIBarButtonItem
без использования пользовательского представления?
Например, см. кнопку 3D в приложении Карты:
или Перемешать все в приложении Музыка:
Есть ли способ выделить (т. е. переключить) UIBarButtonItem
без использования пользовательского представления?
Например, см. кнопку 3D в приложении Карты:
или Перемешать все в приложении Музыка:
Вы можете установить фоновое изображение для UIBarButtonItem
:
item.setBackgroundImage(UIImage(named: "item-bg.png"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
Затем, когда вы хотите отменить выбор, установите фоновое изображение на nil
:
item.setBackgroundImage(nil, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
(Вы должны создать файл изображения для фона)
Проблема в том, что хотя UIControl имеет свойство isSelected
, которое достигает этой цели, UIBarButtonItem
не наследуется от него, поэтому вы не можете привести его и установить значение. Однако я обнаружил странный обходной путь. Если вы установите тип sender
действия кнопки как UIControl
, он будет рассматриваться как полноценный UIControl, и вы можете установить isSelected
.
Например:
@objc func showContentsView(_ sender: UIControl) {
sender.isSelected.toggle()
}
Если вам нужно переключить состояние в другом месте, вы можете иметь переменную в вашем контроллере представления следующим образом:
var selectedControl: UIControl?
Установите значение selectedControl
в своем действии и установите его на nil
при отмене выбора.