Znalazłem rozwiązanie tego problemu, który nie jest jeszcze doskonały, ale mam nadzieję, że wkrótce rozwiążę ostatni problem, który mam.
Używam rubymotion i nawet jeśli mogę przetłumaczyć Objective-C
w Ruby
, nie jestem w stanie zrobić odwrotnie, więc moja odpowiedź będzie w Ruby
. Zapraszam do edycji mojej odpowiedzi, aby dodać odpowiedni kod Objective-C
.
W delegacie mojego NSTokenField
użyłem metody controlTextDidChange z NSControl
, która jest wywoływana za każdym razem, gdy piszę znak w polu tokenu. W tej metodzie sprawdzam, czy jest wywoływane zdarzenie NSLeftMouseUp
, a jeśli tak, to symuluję kliknięcie na Return
(dowiedziałem się z tego drugiego SO question). I to wszystko.
Oto mój kod Ruby
:
def controlTextDidChange(aNotification)
application = NSApplication.sharedApplication
event = application.currentEvent
if event.type == NSLeftMouseUp
e1 = CGEventCreateKeyboardEvent(nil, 0x24, true)
CGEventPost(KCGSessionEventTap, e1)
end
end
Ale tak jak mówiłem, to nie jest jeszcze doskonała: mój problem jest, że jeśli mam listę zakończenia z 3 elementów na przykład, jeden z nich będzie być domyślnie wybranym, powiedzmy pierwszy. W takim przypadku moje rozwiązanie będzie działać zgodnie z oczekiwaniami, jeśli kliknę drugi lub trzeci element, ale będę musiał dwukrotnie kliknąć pierwszy element, aby działał.
Ale nadal jest to dobry początek i mam nadzieję, że to pomoże!
EDIT
Aby rozwiązać ten ostatni problem miałem, ja wyłączyłem autouzupełnianie i wyświetlane tylko pole sugestii. Aby to zrobić, dodałem tę linię do sposobu tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
:
selectedIndex[0] = -1
Czy znaleźć rozwiązanie swojego problemu? – siekfried