Hi,
wie kann ich die Objekte bzw. die Responder chain durchlaufen und einen selector prüfen.
NSMenuItems validiere ich über die dafür vorgesehene Methode (-(BOOL)validateMenuItem:), ich würde das ganz aber auch gerne für Buttons in einer ähnlich Form umsetzen. Zu validateUserInterfaceItem sagt mir Doku folgendes: http://d.pr/i/OQJK+.
Ich validiere meine Buttons aber in einer Subklasse von NSWindowController.
Außerdem sind die besagten Buttons über einen ViewController gekapselt und haben durch die Bank dieselben Targets und Actions, wie die komplementären NSMenuItems. Die Validierung für die NSMenuItems funktioniert einwandfrei, meine Idee:
(im ViewController, der die Buttons verwaltet)
Alles anzeigen
(ich verwende in dem Projekt ARC deswegen kein release/retain)
Das ist ein Ansatz aber ich habe folgende Probleme:
Es ist nicht schön ein NSMenuItem zu erzeugen nur um es einmal durch die Validierung zu jagen, nur um einen BOOL am Ende zu erhalten
Ich kann nicht sicher sein, dass sich die Button so wie die NSMenuItems verhalten, d.h. dass ich mit dieser Methode wirklich das richtige Objekt erwische, das auch "zur selben Zeit" von Cocoa dazu verwendet wird die NSMenuItems zu validieren
Da die Buttons und NSMenuItems den gleichen Effekt haben, wenn sie vom User geklickt werden und die Validierung der NSMenuItems bereits steht würde ich ungerne diesen Code neu oder umschreiben müssen. Was meint ihr?
wie kann ich die Objekte bzw. die Responder chain durchlaufen und einen selector prüfen.
NSMenuItems validiere ich über die dafür vorgesehene Methode (-(BOOL)validateMenuItem:), ich würde das ganz aber auch gerne für Buttons in einer ähnlich Form umsetzen. Zu validateUserInterfaceItem sagt mir Doku folgendes: http://d.pr/i/OQJK+.
Ich validiere meine Buttons aber in einer Subklasse von NSWindowController.
Außerdem sind die besagten Buttons über einen ViewController gekapselt und haben durch die Bank dieselben Targets und Actions, wie die komplementären NSMenuItems. Die Validierung für die NSMenuItems funktioniert einwandfrei, meine Idee:
(im ViewController, der die Buttons verwaltet)
Quellcode
- - (void)validate {
- NSResponder *rep = [NSApplication sharedApplication];
- SEL editObjects = self.editButton.action;
- while (rep) {
- if ([rep respondsToSelector:@selector(validateMenuItem:)] &&
- [rep respondsToSelector:editObjects]) {
- NSMenuItem *tmpMenuItem = [NSMenuItem new];
- tmpMenuItem.action = editObjects;
- [self.editButton setEnabled:[rep validateMenuItem:tmpMenuItem]];
- break;
- } else {
- rep = rep.nextResponder;
- }
- }
- }
(ich verwende in dem Projekt ARC deswegen kein release/retain)
Das ist ein Ansatz aber ich habe folgende Probleme:
Es ist nicht schön ein NSMenuItem zu erzeugen nur um es einmal durch die Validierung zu jagen, nur um einen BOOL am Ende zu erhalten
Ich kann nicht sicher sein, dass sich die Button so wie die NSMenuItems verhalten, d.h. dass ich mit dieser Methode wirklich das richtige Objekt erwische, das auch "zur selben Zeit" von Cocoa dazu verwendet wird die NSMenuItems zu validieren
Da die Buttons und NSMenuItems den gleichen Effekt haben, wenn sie vom User geklickt werden und die Validierung der NSMenuItems bereits steht würde ich ungerne diesen Code neu oder umschreiben müssen. Was meint ihr?