Ich brauche ein Fenster, das in einer Kakaoanwendung über meinem Hauptfenster schwebt. Ich möchte, dass dieses Hauptfenster dem Benutzer erlaubt, etwas Text in ein Eingabefeld einzugeben. Alles ist gut, bis das Texteingabefeld tatsächlich den Fokus erhält. Das Hauptfenster wird "deaktiviert". Dieses Fenster ist grenzenlos und hat eine leicht benutzerdefinierte Form - es ist mehr wie eine Hover-Karte als alles andere, nehme ich an.Cocoa/Objective-C - Unterfenster mit Texteingabe ohne Hauptfenster wird inaktiv
Grundsätzlich möchte ich diese Sache fast genau wie Spotlight (Apple + Space) arbeiten - Sie können Text eingeben, aber das ist so eine Nebenoperation, die Sie im Kontext der größeren UX nicht tun Ich möchte, dass der Erschütterungseffekt des Hauptfensters grau wird (inaktiv wird). Sie werden bemerken, wenn eine Anwendung offen und fokussiert ist, wird Spotlight nicht dazu führen, dass das Fenster dieser Anwendung inaktiv wird.
Dieses Problem tritt auf, weil Texteingabe erfordert, dass das untergeordnete Fenster das Schlüsselfenster wird (es wird nicht zulassen, dass Sie den Cursor in dem Texteingabefeld platzieren). Wenn es der Schlüssel wird, wird das Hauptfenster inaktiv.
Bisher habe ich versucht:
- Subclassing NSWindow für meine Hauptanwendung und überwiegenden isKeyWindow, so dass es nur Schlüssel verliert, wenn die Anwendung nicht mehr die Benutzer konzentrieren (wie zum Fenster gegen). Dies hatte den unbeabsichtigten Effekt, mit dem Schlüsselstatus des untergeordneten Fensters zu kollidieren und sehr seltsame Auswirkungen auf die Tastatureingabe zu haben (einige Schlüssel werden nicht erfasst, wie zum Beispiel Löschen)
- Erstellen einer Ansicht anstelle eines Fensters. Funktioniert nicht wegen this Problem - Sie können in diesen Tagen nicht über ein Webkit WebView zeichnen.
Haben alle Cocoa/OSX-Assistenten irgendwelche Ideen? Ich bin ein bisschen besessen von diesem. Ein Jucken kann ich nicht kratzen.
Edit: habe auch versucht, über das untergeordnete Fenster zu überschreiben. Wenn Sie auf das Fenster klicken, wird das Hauptanwendungsfenster inaktiv.
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return NO;
}
Edit 2: Nach Aufschrauben etwa mit NSMenu für eine Weile, verschrottet ich diesen Ansatz. Es scheint aber, dass ich etwas gefunden habe. In NSPanel gibt es eine Maske Fensterstil genannt:
NSNonactivatingPanelMask
The panel can receive keyboard input without activating the owning application.
Valid only for an instance of NSPanel or its subclasses; not valid for a window.
diesen Versuch nun aus ...
Bearbeiten 3: NSNonactivatingPanelMask hat nicht den Trick. Keine Ideen.
Haben Sie jemals eine Lösung dafür gefunden? Entschuldigung, ich hätte Sie per E-Mail kontaktiert, aber Ihre Website scheint nicht erreichbar zu sein. – Wesley