Frage

Ich arbeite derzeit in einem Projekt mit einem NSoutlineView ...

Ich benutze natürlich Nscell (n) und muss die Fähigkeit, Text in der Zelle auszuwählen, oder zumindest ... die Auswahl (und das Höhepunkt) der Zellen verhindern ...

Ich suche alle Optionen auf IB, kann aber nicht die richtige ...

Gibt es programmgesteuert oder nicht einen Weg, um die Auswahl/Hervorhebung von Zellen zu verhindern oder den Benutzer den Zellinhalt auszuwählen?

Danke =)

War es hilfreich?

Lösung

Das ist nicht viel mit NSCell verwandt, vielleicht möchten Sie implementieren outlineView:shouldSelectItem: in Ihrem Delegierten.

Auf der Nscell, setEnabled:NO, kann auch helfen. Aus der Dokumentation:

setEnabled:(BOOL)flag

Der Text von behinderten Zellen wird in Grau geändert. Wenn eine Zelle deaktiviert ist, kann sie nicht hervorgehoben werden, die Mausverfolgung nicht unterstützt (und daher nicht an der Ziel-/Aktion -Funktionalität teilnehmen) und kann nicht bearbeitet werden. Sie können jedoch immer noch viele Attribute einer behinderten Zelle programmatisch verändern. (Die SetState: Methode zum Beispiel funktioniert immer noch.)

Andere Tipps

Versuchen Sie, einzustellen:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Sie könnten auch versuchen, die HighlightelectionIncliprect überschrieben zu haben:, aber ich bin mir nicht ganz sicher, ob dies funktionieren wird.

Lassen Sie uns ein kurzes Beispiel wie die Absichtsansicht unten nennen. Es gibt 3 Spalten: firstName, lastName, und fullName.

enter image description here

Nehmen wir in diesem speziellen Beispiel an, wir möchten nur zulassen firstName und lastName während fullName (was möglicherweise abgeleitet wird von firstName und lastName) ist nicht. Sie können dies im Interface Builder einrichten, indem Sie das Kontrollkästchen für die Tabellespalte überprüfen oder deaktivieren. Klicken Sie dazu 3 -mal in einer der Tabellenspalten (nicht auf den Header, sondern innerhalb der Überlinienansicht). Dies wählt zuerst die aus NSScrollView, dann ist die NSOutlineView, dann an NSTableColumn: enter image description here

Sie würden die Attribute wie die folgenden festlegen:

enter image description here

enter image description here

enter image description here

Dies bietet einen Start, indem ein Standardwert für die gesamte Spalte festgelegt wird. Wenn Sie mehr Kontrolle darüber benötigen, ob der Artikelwert einer bestimmten Zeile bearbeitet werden sollte oder nicht, können Sie die verwenden outlineView:shouldEditTableColumn:item: Delegiermethode:

#pragma mark -
#pragma mark <NSOutlineViewDelegate>

- (BOOL)outlineView:(NSOutlineView *)anOutlineView
    shouldEditTableColumn:(NSTableColumn *)tableColumn
               item:(id)item {

    if ([[tableColumn identifier] isEqualToString:@"firstName"] ||
        [[tableColumn identifier] isEqualToString:@"lastName"]) {

        return YES;

    } else if ([[tableColumn identifier] isEqualToString:@"fullName"]) {

        return NO;
    }
    return YES;
}

Wenn Sie steuern möchten, ob eine bestimmte Zeile in der Gliederungsansicht ausgewählt werden kann (z. B. können Sie die Auswahl eines Gruppenelements verhindern), können Sie verwenden outlineView:shouldSelectItem:.

 - (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldSelectItem:(id)item {
    // if self knows whether it should be selected
    // call its fictional isItemSelectable:method:

    if ([self isItemSelectable:item]) {
        return YES;
    }

    /* if the item itself knows know whether it should be selectable
     call the item's fictional isSelectable method. Here we
     are assuming that all items are of a fictional
      MDModelItem class and we cast `item` to (MDModelItem *)
      to prevent compiler warning */

    if ([(MDModelItem *)item isSelectable]) {
        return YES;
    }

    return NO;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top