Frage

ich meine Bewerbung benötigen ein Fenster zu öffnen, wenn ein Benutzer doppelklickt auf einer Zeile in einer NSTableView. Ich bin ein bisschen eine schwierige Zeit mit Informationen oder Beispiele zu finden, wie dies zu erreichen. Kann jemand mich in die richtige Richtung?

War es hilfreich?

Lösung

Werfen Sie einen Blick auf die -setDoubleAction: Methode auf NSTableView; Sie können, dass ein Verfahren festgelegt, die genau wie die normale Ziel-Action-System, sondern auf einem Doppelklick.

aufgerufen wird

In dieser Action-Methode, -clickedRow nützlich sein wird.

Andere Tipps

Das Hinzufügen von mehr Basisinformationen zu @JimPuls zum Nutzen anderer Newcomer Cocoa beantworten.

  1. Ein IBOutlet zum NSTableView muss in einer Schnittstelle deklariert werden. Ich nahm an, es wird bevorzugt, um in der Tabelle des Delegierten zu tun.
  2. Die IBOutlet auf den Tisch muss über Interface Builder angeschlossen werden. Um das zu tun Ctrl-Drag & Drop in IB aus der Klasse, die den Auslass der Tabellenansicht erklärt. Wenn Sie die Maus loslassen sollte ein Popup mit dem Namen des Ausgangs erscheinen Sie in Schritt 1 # erklärt. Wählen Sie das.
  3. Im @implementation Abschnitt, auf der -awakeFromNib Methode, rufen -setTarget: und -setDoubleAction: auf den IBOutlet in Schritt # 1 erklärt, und im Schritt # 2 verbunden
  4. .

Hier ist ein Auszug aus meinem Tisch Ansicht delegieren. Ich habe meine Delegierten auch als Datenquelle einrichten, so dass ist, warum Sie mit ihm verbunden, sowohl die NSTableViewDelegate und NSTabeViewDataSource Schnittstellen sehen werden.

// Interface-Auszug.

@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource>
{
  // This iVar needs to be connected to the table view via the IB.
  IBOutlet NSTableView *tableOutlet;
}

@property (assign) IBOutlet NSTableView *tableOutlet;

- (void)doubleClick:(id)nid;

@end

// Implementierung Auszug.

@implementation MyTableViewDelegate

@synthesize tableOutlet = _tableOutlet;

- (void)awakeFromNib {
  [_tableOutlet setTarget:self];
  [_tableOutlet setDoubleAction:@selector(doubleClick:)];
}

- (void)doubleClick:(id)object {
  // This gets called after following steps 1-3.
  NSInteger rowNumber = [_tableOutlet clickedRow];
  // Do something...
}

Hope, das hilft.

Als PR Singh sagte, man Kakao Bindungen verwenden können, können Sie auch entlang der selectedObjects passieren.

  1. Wählen Sie Ihre Tabellenansicht in IB dann in Bindings Inspektor festgelegt werden, diese beiden Bindungen sich wie folgt zusammen:

    >Double Click Target
    
    bind to = Application delegate object (or file owner)
    model key path = self
    selector name = myMethod:
    
    >Double Click Argument
    
    bind to = array controller
    controller key = selectedObjects
    selector name = myMethod:
    

Wo myMethod als

implementiert
- (void)myMethod:(NSArray*)selectedObjects
{
    NSLog(@"%@", selectedObjects);
}

Dies ist auch hier dokumentiert: https://developer.apple.com/library/mac/qa/ qa1472 / _index.html

Wenn jemand sucht nach einer schnellen Version 2.0: Dies ist, was für mich funktioniert. Scheint viel einfacher als der Objective-C-Code.

@IBOutlet weak var searchResultTable: NSTableView!

override func viewDidLoad() {
    super.viewDidLoad()
    searchResultTable.doubleAction = "doubleClickOnResultRow"
}

func doubleClickOnResultRow()
{
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}

Sie können die Doppelklick-Aktion im Interface Builder verdrahten. Control-Klick Ihre Tabellenansicht (stellen Sie sicher, dass Sie immer die Tabellenansicht , nicht die Scroll-Ansicht oder die Clip-Ansicht oder eine einspaltige Tabelle) seine Verbindungen Platte zu erhalten. Finden Sie den „Double“ Artikel in dem „Gesendet Aktionen“ Abschnitt. Schließen Sie es an die IBAction Ihrer Wahl.

Auf SWIFT 4.1 Sie legen die Doubleaction Methode des Tableview-Objekt in Ihrem Code eine @objc Funktion auszuführen, indem ein #selector (nameOfYourFunction) mit

Innerhalb dieser Funktion rufen Sie eine segue. Sie können Ihr neues Fenster zum Ursprung Fenster auf Interface (nicht auf das NSTableView Objekt, sondern die tatsächliche Viewcontroller-Objekt verknüpfen.

Dann tun Sie alle Ihre Setup für das neue Fenster für segue auf vorbereiten:

In Ordnung zuerst auf Interface Builder:

Natürlich gibt eine Kennung zu diesem segue:

Als nächstes werden in unserem ersten View-Controller (wo die Tabellenansicht ist) Code:

 //We use this function: prepare for segue
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        // check if we are referring to the actual segue we want
          if segue.identifier?.rawValue == "segueToYourNewWindow" {
    // now create a reference to that new window
            let yourNewWindow = segue.destinationController as! newWindowViewController
    // now change variables inside that view controller code, remember that the objects might fail if they are not yet visible to the user so first set up the variables or call them using the main thread, up to your design.
           yourNewWindow.selectedRowVariable = thisTableView.clickedRow
        }

Dann brauchen wir eine Funktion, um die Segue auf die Tabellenansicht des Doppelklick ausführen, wird diese Funktion mit einem #selector genannt und muss daher sichtbar zu Objective-C sein (auch, dass wir in Swift sind programing) wir einfach nur den Anfang Funktion mit @Objc das ist es.

@objc func doubleClickOnResultRow() {
//beware of double-clicking also triggers this function when no rows is selected with the selectedRow being -1
 if (thisTableView.selectedRow > -1 ) {
  performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueToYourNewWindow"), sender: nil)
 }
}

Schließlich setzten wir diese Funktion auf die Doubleaction Methode des Tableview in dem Ersteinrichtung Teil unseres Code wie folgt:

override func viewDidLoad() {
    super.viewDidLoad()
    thisTableView.doubleAction = #selector(doubleClickOnResultRow)
}

Sie können mit den Bindungen gleiche tun, zunächst einmal ein mentod in .h-Datei deklarieren

-(IBAction)openWindow:(id)sender

in .m-Datei implementieren die gleiche

-(IBAction)openWindow:(id)sender
{
    //do something here;
}

bekam zu dieser Spitze, wo Ihre Tabellenansicht vorhanden ist, wählen Sie Tabellenansicht ist und bekam binden die die zweite letzte Registerkarte Attribut Inspektor, offenes Doppel CICL Argument Aufklappdreieck Prüfung Fuchs wählen Sie die Datei des Besitzers, Modellschlüssel pat sein sollte „selbst überprüfen Openwindow“, wird Selektorname sein‚:‘, gleichen Prozess zu tun mit‚klicken Sie doppelt Ziel‘Offenlegung, Dies funktioniert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top