2
我希望父母ViewController
能夠處理其子帳號ViewControllers
之一生成的目標操作。addTarget:action:forControlEvents:目標爲nil時的選擇器語法?
根據Apple文檔,應該可以通過將target
設置爲nil
並遵循Responder鏈來實現。
如果指定零爲目標對象時,控制搜索 響應鏈爲定義指定操作 方法的對象。 https://developer.apple.com/documentation/uikit/uicontrol
但我怎麼寫的操作方法簽名時target
是nil
?
通常,您可以將函數名稱放在#selector()
中,這樣可以讓您編譯時檢查該簽名是否存在方法。像這樣:
class MyViewController: UIViewController {
override func viewDidLoad() {
self.button.addTarget(self, action: #selector(buttonPressed(sender:)), for: .touchDown)
}
func buttonPressed(sender: UIButton) { }
}
但由於target
是nil
編譯器會抱怨,因爲它無法找到它:
// ! Use of unresolved identifier "buttonPressed(sender:)"
button.addTarget(nil, action: #selector(buttonPressed(sender:)), for: .touchDown)
我試圖用一個字符串初始化一個選擇,但是編譯器也抱怨。
// ! String literal is not a valid Objective-C selector
button.addTarget(nil, action: Selector("buttonPressed(sender:)"), for: .touchDown)
但這無疑違背了一點:一個響應者可以到選擇響應沒有明確地預先定義響應者.. – Aodh
你是什麼意思?因爲現在選擇器必須是'MyViewController'中定義的方法?我希望我的孩子的行爲由其父母處理,所以我希望我的選擇器在父母中定義。 – MH175
響應者鏈機制的想法是響應者是可能響應者鏈中的第一個,沒有明確命名響應者將響應,允許鬆散耦合。 – Aodh