2016-05-06 5 views
-1

Bevor ich meine OSX-Frage stelle, erlaube mir bitte, eine Funktion in MS Windows zu beschreiben.XCode/Swift OSX. Auswählen und Bearbeiten von Zellen in ViewBased NSTableView

Wenn ich eine Windows-Anwendung in MS Visual Studio erstelle, wo die Anwendung ein einfaches DataGrid enthält, kann der Benutzer einfach in eine Zelle klicken, den Inhalt bearbeiten und mit den Pfeiltasten hoch/runter schnell aus der Zelle navigieren der Nächste. Wenn Sie die Zelle ausschließen, wird das EndEdit-Ereignis ausgelöst. Mit den Pfeiltasten auf/ab kann ein Benutzer schnell die Werte einer Spalte nach unten bewegen, ohne die Eingabetaste oder die Maus zu drücken.

Ich versuche, das gleiche mit OSX XCode/Swift zu tun. Mit der Maus in eine Zelle klicken und bearbeiten ist kein Problem. Aber es scheint, als müsste ich zweimal auf die Zelle klicken, um sie zum Bearbeiten auszuwählen, und nach der Bearbeitung muss ich die Eingabetaste drücken oder auf eine andere Zelle klicken. Ich kann nicht einfach die Auf-/Ab-Pfeiltasten benutzen, um aus der Zelle zu kommen.

Ist das einfach die Art, wie OSX funktioniert? Ich meine, ich mache eine OSX-Anwendung, also möchte ich, dass sie sich wie eine native Anwendung verhält, aber es scheint nur so, als ob viel Eingabe und Klicken erforderlich wäre, wenn der Benutzer zum Beispiel einige Zellen bearbeiten würde.

Gibt es irgendwelche Eigenschaften, die ich in der ViewBased TableView einstellen muss?

Sorry wegen der langen E-Mail - ich hoffe ich habe es trotzdem erklärt.

Dank Ian

+1

Ich würde gerne sehen, was Sie bisher versucht haben. Denn theoretisch ist es durchaus möglich, Ihr Verhalten zu erreichen. Stellen Sie sich OSX 'Excel (Numbers) vor. Sie können auf jeden Fall etwas Ähnliches erstellen. – Akaino

+0

Bisher habe ich gerade versucht, Eigenschaften im Inspektor für IDE-Attribute zu ändern. Es gibt ein Paar, das sich darauf bezieht, wie eine Zelle ausgewählt wird. Und es gibt einen Zusammenhang damit, wie das EditEnd-Ereignis ausgelöst wird. Aber ich kann nichts sehen, was damit zusammenhängt, wie der Fokus aus der Zelle genommen werden kann - dh alles, was es dem Benutzer erlauben würde, die Auf-/Ab-Pfeiltasten zu drücken, um zur nächsten Zelle zu gehen. Vielleicht muss ich nur Tasten drücken und programmgesteuert eine Zeile nach oben/unten verschieben und den Bearbeitungsfokus auf die nächste Zelle legen - also meine eigene rollen - jetzt, wie Sie sagen, ich versuche nicht, eine nicht-Mac-ähnliche Benutzeroberfläche zu erstellen . – IanS

+0

Sie können dieses Verhalten nicht erreichen, indem Sie einfach IB Flags afaik setzen. Das programmatische Abrufen der keyPress-Ereignisse scheint der richtige Weg zu sein. Ich würde die gleiche Tour machen. – Akaino

Antwort

0

Nach viel Kopf kratzen Ich habe etwas, das genau zu funktionieren scheint, wie ich will.

myTableView befindet sich auf einem NSViewController. Im NSViewController der viewDidLoad() Ich habe das bekam:

super.viewDidLoad(); 

NSEvent.addLocalMonitorForEventsMatchingMask(NSEventMask.KeyDownMask, handler:{ 
    (event: NSEvent) in 
    self.myTableView.keyDown(event); 

    switch(event.keyCode) 
    { 
     case 36: 
      return nil; 
     case 125: 
      return nil; 
     case 126: 
      return nil; 
     default: 
      return event; 
    } 
}) 

I Ich bin nicht 100% sicher, aber meine Gedanken waren zu bekennen haben, dass das Standardverhalten des Tableview für die nach oben ist Pfeiltasten/ab um die Zeilenauswahl um eine Zeile nach oben oder nach unten zu verschieben, aber das passiert nicht, wenn eine Zelle bearbeitet wird. Wenn die Textzelle den Bearbeitungsfokus hat, verschieben die Hoch/Runter-Tasten einfach den Cursor zum Anfang/Ende der Zelle (dh bewegen den Cursor innerhalb der Zelle). Nicht das Verhalten, das ich will, also dachte ich, wenn ich diese Ereignisse innerhalb der Zelle schlucken (nil machen) würde, dann würde der Pfeil-Tastendruck zur Tabellenansicht aufblubbeln und es würde die hoch/runter Reihe auswählen - wenn du siehst was ich meine.

Wie auch immer - egal, wo meine Gedanken waren - das scheint genau so zu funktionieren, wie ich es will und wenn der Bearbeitungsfokus in der nächsten Zelle ankommt, wird er sofort bearbeitet. Grundsätzlich funktioniert es genau wie in Programmen wie Excel und Zahlen usw.