Как добавить отзывчивый UIBarButtonItem? - PullRequest
0 голосов
/ 25 апреля 2018

Я бы хотел, чтобы пользовательский UIBarButtonItem отвечал на нажатие, изменяя пользовательский UIImage.Кажется, что свойства isTapped не существует, поэтому как можно было бы проверить, была ли выбрана кнопка?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Похоже, вы ищете action.UIBarButtonItem initializer содержит параметр action.Вы используете add #selector, чтобы добавить к нему функцию.Функция будет делать все, что вы хотите, когда нажмете barButton.

// 1. Create a programmatic barButton
var changeImageButton: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()

    // 2. initialize the changeImageButton with a UIBarButtonItem. In the selector is where you can find out if the button was tapped
    changeImageButton = UIBarButtonItem(title: "Change Image", style: .plain, target: self, action: #selector(theButtonWasTapped))

    changeImageButton.tintColor = .orange
    navigationItem.rightBarButtonItem = changeImageButton
}

// 3. this will run when the changeImageButton is pressed
@objc func theButtonWasTapped(){

   print("my changeImageButton was tapped")

   // Add the code to change the UIImage here
}
0 голосов
/ 25 апреля 2018

Полагаю, вы хотели бы отследить, нажата ли кнопка бара или нет.Сам UIBarButton не имеет такого свойства, как isSelected.Но вы можете создать UIBarButtonItem и установить для пользовательского представления значение UIButton.

override func viewDidLoad() {
    super.viewDidLoad()

    let btnCustom = UIButton(type: .custom)
    btnCustom.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
    btnCustom.addTarget(self, action: #selector(tappedBarButton(sender:)), for: .touchUpInside)
    btnCustom.setImage(UIImage(named:"normalImage"), for: .normal)
    btnCustom.setImage(UIImage(named:"selectedImage"), for: .selected)

    btnCustom.imageEdgeInsets = UIEdgeInsetsMake(5, 5, 5, 5)

    let barBtnItem = UIBarButtonItem(customView: btnCustom)
    navigationItem.leftBarButtonItem = barBtnItem
}

@objc func tappedBarButton(sender: Any) {
    if let btnCustom = sender as? UIButton {
        btnCustom.isSelected = true // or as per your logic
    }
}
0 голосов
/ 25 апреля 2018

Если состояние выбора не может быть выведено из других динамических свойств, создайте подкласс UIBarButtonItem и добавьте выбранный флаг (или любое другое состояние, которое вы хотите сохранить).

Пример подкласса: UIBarButtonItem: https://github.com/cjwirth/RichEditorView/blob/master/RichEditorView/Classes/RichEditorToolbar.swift#L27

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

Информация по теме: https://developer.apple.com/documentation/uikit/uiappearance

...