gpt4 book ai didi

ios - touchesBegan 时扩展 UIBarButtonItem

转载 作者:行者123 更新时间:2023-11-28 05:51:16 26 4
gpt4 key购买 nike

我实际上正在处理与 ReachabilityManager 类的连接管理。

我创建了一个 toast,显示连接丢失和恢复的时间。我还创建了两个扩展(UIButton 和 UISwitch),并在其上覆盖了 func touchesBegan 以检查和播放按钮/开关的 Action ,或者仅显示带有错误消息的 toast(并且不播放按钮/开关的选择器)。

这里是我的 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 扩展的东西。关于我为什么想要它的另一个信息是我无法重构应用程序的所有 barbutton 项目(这将花费我 2 周的时间)。为此,我必须找到一种扩展方法或其他方法,但绝对是通用解决方案。

如果有人有任何想法,我将不胜感激。

提前谢谢。

亲切的问候,

最佳答案

一个快速的解决方案:使用 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]
}

希望对您有所帮助!

关于ios - touchesBegan 时扩展 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52872137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com