gpt4 book ai didi

ios - swift | UIBarButton 不工作/不去行动目标

转载 作者:可可西里 更新时间:2023-11-01 01:07:33 24 4
gpt4 key购买 nike

所以我在类外创建了一个自定义 UIBarButtonItem 并设置了它的属性。 我用一个单独的方法将它添加到导航 Controller 中,该方法从 viewDidLoad() 调用。按钮的目标是在类本身内部声明的。我什至尝试在目标方法中添加一个断点以确保它有效,但事实证明按钮没有到达目标并且尽管有断点但仍然点击。我以编程方式编写了所有代码。

我在 stackoverflow 上尝试了这个问题的答案,但没有成功。

当我在 viewDidLoad 中声明按钮时,目标确实识别了按钮并且按钮也没有显示。

提前致谢,下面是相同的代码

// inside class but outside viewDidLoad
let volumeButton = UIBarButtonItem(image: UIImage(named: "speaker"), style: UIBarButtonItem.Style.plain , target: self, action: #selector(volumeButtonTapped(_ :)))

//// inside a custom method which is called from viewDidLoad()
self.navigationItem.leftBarButtonItem = volumeButton

//// below is the target declared inside the class
@objc func volumeButtonTapped(_ sender: Any) {
if volume=="loud"{
volume = "mute"
volumeButton.image = UIImage(named: "mute")
print("volume set to mute")
//UserDefaults.standard.set(volume, forKey: "mute")
}
if volume == "mute"{
volume = "loud"
volumeButton.image = UIImage(named: "speaker")
print("volume set to loud")
//UserDefaults.standard.set(volume, forKey: "speaker")
}
}

最佳答案

当您像您一样初始化 volumeButton 时,目标 (self) 仍然是 nil。将按钮设为 lazy var:

lazy var volumeButton = UIBarButtonItem(image: UIImage(named: "speaker"), style: .plain , target: self, action: #selector(volumeButtonTapped))

正如@Robert Dresler 所述,您还必须将 volumeButtonTapped 函数中的第二个 if 语句替换为 else if 以生成您的代码工作——尽管这与目标 Action 问题无关。

您还可以通过使用与此类似的解决方案使您的代码更简洁:

var deviceIsMuted = false {
didSet {
volumeButton.image = UIImage(named: deviceIsMuted ? "mute" : "speaker")
print("volume set to", deviceIsMuted ? "mute" : "loud")
}
}

@objc func volumeButtonTapped(_ sender: Any) {
deviceIsMuted = !deviceIsMuted
}

关于ios - swift | UIBarButton 不工作/不去行动目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54475046/

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