Je ne suis pas certain que vous allez voir les messages qui étaient en train d'etre modérés, mais j'ai développé un petit projet partant de rien que vous pouvez trouver sur github: github/patricerapaport/TestPushbuton
La première vue- est une NSViewController (dans le Main.Storyboard) et le bouton qu'elle contient fonctionne correctement
La seconde vue, TesterWindow, que vous pouvez accéder avec le menu Actions/Tester est une NSWindowController, et le bouton ne déclenche pas l'action à laquelle il est relié
La troisième vue, CliquerWindow, que vous pouvez accéder avec le menu Actions/cliquer est également une NSWindowController dans laquelle j'ai subclassé le bouton pour le faire réagir à MouseDown. Cela fonctionne correctement et en voici le code:
import Cocoa
@IBDesignable class CButton: NSButton {
var _controller: NSWindowController!
@IBInspectable var controller: NSWindowController? {
get {
return _controller
}
set {
_controller = newValue
}
}
override func mouseDown(with event: NSEvent) {
if action != nil {
self.window?.windowController?.perform(self.action, with: self)
} else {
super.mouseDown(with: event)
}
}
}
class cliquerWindow: NSWindowController {
var num: Int = 1
@IBOutlet weak var btCliquer: CButton!
override open var windowNibName: NSNib.Name? {
let els = className.components(separatedBy: ".")
if els.count > 1 {
return els[1]
} else {
return els[0]
}
}
override func windowDidLoad() {
super.windowDidLoad()
btCliquer.controller = self
}
@IBAction @objc func cliquer(_ sender: Any) {
Swift.print("CButton clicked \(num)")
num += 1
}
}
Vous remarquerez que la variable controller de CButton n'est pâs utilisée. Donc on devrait pouvoir commenter la ligne 37. Siu vous le faites, le bouton ne réagira plus au click.