Frage

Aus irgendeinem Grunde die NSButtonCell für meine Tabellenansicht ist vorbei das falsche Objekt als Parameter. Ich versuche, den Tag des NSButtonCell zu lesen, nachdem es angeklickt wird.

Hier ist eine vereinfachte Version von meinem Code:

- (int)numberOfRowsInTableView:(NSTableView *)aTableView {
    return 3;
}

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {
    [aCell setTitle:@"Hello"];
    [aCell setTag:100];
}

- (void)buttonClick:(id)sender {
    NSLog(@"THE TAG %d",[sender tag]);
    NSLog(@"THE TITLE: %@",[sender title]);
}

- (void)refreshColumns {
    for (int c = 0; c < 2; c++) {
        NSTableColumn *column = [[theTable tableColumns] objectAtIndex:(c)];

        NSButtonCell* cell = [[NSButtonCell alloc] init];
        [cell setBezelStyle:NSSmallSquareBezelStyle];
        [cell setLineBreakMode:NSLineBreakByTruncatingTail];
        [cell setTarget:self];
        [cell setAction:@selector(buttonClick:)];
        [column setDataCell:cell];
    }
}

- (void)awakeFromNib {
    [self refreshColumns];
}

Die resut von der Konsole sagen:

    THE TAG:   0
    -[NSTableView title]: unrecognized selector sent to instance 0x100132480

Auf dem ersten Blick (für mich zumindest) sollte sagen, dass der Tag 100 ist, aber es funktioniert nicht. Auch (wie es von der zweiten Ausgabe der Konsole zu sehen ist), scheint es, dass der Parameter auf die „Button“ Selektor ist falsch gesendet wird, glaube ich, soll es sein, den NSButtonCell empfangen, aber es ist die NSTableView erhalten.

War es hilfreich?

Lösung

Anscheinend ist der Absender ist die Tabellenansicht aber nicht spezifische Tabellenansicht Zelle.

Ich habe keine Ahnung, wie die Tabellenzelle, damit der Absender werden, aber Sie können wissen, welche Zelle durch die Suche nach dem Index der geklickten Zeile und Spalte geklickt wird, und dann können Sie das tun, was sollte nach der Zelle passieren geklickt wird.

- (void)buttonClick:(id)sender {
    NSEvent *event = [NSApp currentEvent];
    NSPoint pointInTable = [tableView convertPoint:[event locationInWindow] fromView:nil];
    NSUInteger row = [tableView rowAtPoint:pointInTable];
    NSTableColumn *column = [[tableView tableColumns] objectAtIndex:[tableView columnAtPoint:pointInTable]];
    NSLog(@"row:%d column:%@", row, [column description]);
}

Andere Tipps

In diesem Fall ist der Sender in der Tat ein NSTableView aber Sie können die Zeile und Spalte der Steuerung abzurufen, dass tatsächlich ausgelöst das Ereignis einfach mit [Absender clickedRow] und [Absender clickedColumn].

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