Ваш подход выглядит необычно для меня. Вам лучше иметь одно действие, которое может сделать последующий вызов соответствующих методов в зависимости от текущего состояния (которое не привязано к кнопке панели). Однако, поскольку сам вопрос заключается в том, как программно установить действие UIBarButtonItem
, я отвечу на него ниже.
UIBarButtonItem
имеет свойства target
и action
, которые имеют выставленные сеттеры. Вы можете установить их во время выполнения всякий раз, когда вам нужно, но ваши селекторы должны быть доступны во время выполнения obj-c:
@objc private func editObjectAction(_ sender: UIBarButtonItem) {
sender.action = #selector(cancelAction(_:))
}
@objc private func cancelAction (_ sender: UIBarButtonItem) {
sender.action = #selector(editObjectAction(_:))
}
Имейте в виду, что приведенный выше код работает, только если свойство target элемента установлено на владельца методов (чаще всего это должно быть self
)