【发布时间】:2019-06-25 18:25:42
【问题描述】:
所以我在类外创建了一个自定义 UIBarButtonItem 并设置了它的属性。 我以从 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")
}
}
【问题讨论】:
-
你继承自
UINavigationController并覆盖viewDidLoad? -
我在 AppDelegate 中添加了这样的导航控制器:var navigationController: UINavigationController?是的 viewDidLoad 被覆盖,其他一切正常
-
你能用你的自定义
viewDidLoad显示一个类声明吗?喜欢class Name: Something -
是不是因为
speaker图片不存在而看不到这个按钮? -
我看到的下一个问题是 objc 方法中有两个 if 语句。您首先更改文本,然后执行第二个,因此您始终运行两个 if 语句。您应该使用
else if代替第二个条件
标签: ios swift uinavigationcontroller uibarbuttonitem