我有以下代碼設置:選擇在NavigationItem調用函數「跳」,也就是在父導航欄
class MyNavigationBar: UINavigationBar {
override func awakeFromNib() {
super.awakeFromNib()
let myNavItem = MyNavigationItem()
setItems([myNavItem], animated: false)
}
//Weird, the selector of the item calls this function
func doSomething() {
// This do some stuff
}
}
class MyNavigationItem: UINavigationItem {
private let myButton :UIBarButtonItem = {
let barButton = UIBarButtonItem(image: UIImage(named: "ic_topnav_userpic"), style: UIBarButtonItemStyle.Done, target: nil, action: #selector(doSomething))
return barButton
}()
// Initializers
init() {
super.init(title: "Title")
rightBarButtonItem = myButton
}
//..other initializers
//This function is never called
func doSomething() {
// This should do some stuff
}
}
當我做我的Storyboard
MyNavigationBar
類型的任何UINavigationBar
。然後,當我點擊myButton
項目時,「選擇」的功能是MyNavigationBar
的實施中存在的功能。
這是怎麼發生的?
它應該以這種方式行事嗎?,我期待着所謂的函數是MyNavigationItem
裏面的函數。
這是爲什麼呢? –
你只是寫這個函數,但從來沒有真正地調用它。您可以使用對象調用某個函數,也可以將其寫入另一個您知道會執行的函數中。但是您在'class MyNavigationItem:UINavigationItem'中寫入的函數只是其他任何函數。它不會在任何地方被調用,不像你在'class MyNavigationBar:UINavigationBar'中寫的那個'override func awakeFromNib()'調用** FOR SURE **。 – Dershowitz123
但爲什麼?我的選擇器指向MyNavigationItem中的一個。我甚至可以刪除MyNavigationBar中的一個,它不會抱怨。只需點擊按鈕 –