Расширение UIBarButtonItem при прикосновении к Began - PullRequest
0 голосов
/ 18 октября 2018

Я работаю над управлением соединением с классом ReachabilityManager.

Я создал тост, который показывает, когда соединение теряется и восстанавливается.Я также создал два расширения (UIButton и UISwitch), и на нем я перезаписываю func touchsBegan, чтобы проверять и воспроизводить действие кнопки / переключателя или показывать тост только с сообщением об ошибке (и не воспроизводить селектор кнопки / переключателя).

Вот мое расширение UIButton, чтобы понять:

extension UIButton {
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if ReachabilityManager.shared.reachability.connection == .none {
            ReachabilityManager.shared.customConnectionToast(ToastStyle.connectionLost.applyStyle(),
                                  description: NSLocalizedString("no_connection_error_message", comment: ""))
        } else {
            sendActions(for: UIControlEvents.allTouchEvents)
        }
    }
}

Теперь мне нужно создать такое же расширение для UIBarButtonItem, но проблема в том, что для этого объекта нет действия touchesBegan, и я не знаю, как это сделать.сделать что-то похожее на расширения UIbutton и UISwitch.Еще одна информация о том, почему я хочу этого, заключается в том, что я не могу реорганизовать все элементы приложения в приложении (это займет у меня 2 недели).Для этого мне нужно найти способ с расширением или чем-то еще, но абсолютно универсальным решением.

Если у кого-то есть идеи, я был бы признателен.

Заранее спасибо.

С уважением,

1 Ответ

0 голосов
/ 18 октября 2018

Одно быстрое решение: используйте UIButton и сделайте его UIBarButtonItem, затем вы можете использовать свою категорию выше опубликованной вами (расширение UIButton) для вашей новой кнопки, действующей как barButtonItem.

Вот так:

internal lazy var button_Close: UIButton = {
        let button = UIButton(type: .custom)
        button.setImage(.close, for: .normal)
        button.imageEdgeInsets = UIEdgeInsets.init(top: 0, left: -30, bottom: 0, right: 0)
        button.addTarget(self, action: #selector(back(_:)), for: .touchUpInside)
        return button
    }()

Сделайте это элементом barButton:

override func viewDidLoad() {
    super.viewDidLoad()

    let barButton = UIBarButtonItem(customView: self.button_Close)
    self.button_Close.frame = CGRect(x: 0, y: 0, width: 55.0, height: 44.0)
    let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target: nil, action: nil)
    if #available(iOS 11.0, *) {
        negativeSpacer.width = -30
    }
    self.navigationItem.leftBarButtonItems = [negativeSpacer, barButton]
}

Надеюсь, это поможет!

...