1

Wie kann ich ein NSCollectionViewItem abwählen, indem ich erneut darauf klicke?heben Sie die Auswahl von NSCollectionViewItem auf, indem Sie darauf klicken.

Dies ist der Code verwende ich für die Auswahl und Abwahl:

func collectionView(collectionView: NSCollectionView, didSelectItemsAtIndexPaths indexPaths: Set<NSIndexPath>) { 
     print("selected") 
     guard let indexPath = indexPaths.first else {return} 
     print("selected 2") 
     guard let item = collectionView.itemAtIndexPath(indexPath) else {return} 
     print("selected 3") 
     (item as! CollectionViewItem).setHighlight(true) 
    } 

    func collectionView(collectionView: NSCollectionView, didDeselectItemsAtIndexPaths indexPaths: Set<NSIndexPath>) { 
     print("deselect") 
     guard let indexPath = indexPaths.first else {return} 
     print("deselect 2") 
     guard let item = collectionView.itemAtIndexPath(indexPath) else {return} 
     print("deselect 3") 
     (item as! CollectionViewItem).setHighlight(false) 
    } 

///////////////////// 

    class CollectionViewItem: NSCollectionViewItem { 


     func setHighlight(selected: Bool) { 

      print("high") 
      view.layer?.borderWidth = selected ? 5.0 : 0.0 
      view.layer?.backgroundColor = selected ? NSColor.redColor().CGColor : NSColor(calibratedRed: 204.0/255, green: 207.0/255, blue: 1, alpha: 1).CGColor 
     } 
    } 

Dieser Code deslect, wenn ein anderes Element geklickt wird, aber nicht, wenn das gleiche Element. Ich möchte festlegen, wenn auf denselben Artikel geklickt wird.

Antwort

0

Ein einfacher Trick ist die Verwendung von CMD - Linke Maustaste. Obwohl dies mein Problem nicht genau löst, ist es immer noch besser als nichts.

0

Sie können dies erreichen, indem Sie den ausgewählten Status des Elements beobachten und NSClickGestureRecognizer in der Ansicht des Elements installieren, wenn es ausgewählt ist, und es deinstallieren, wenn es deaktiviert ist.

Setzen Sie den folgenden Code irgendwo in Ihrer NSCollectionViewItem Unterklasse:

- (void)onClick:(NSGestureRecognizer *)sender { 
    if (self.selected) { 
     //here you can deselect this specific item, this just deselects all 
     [self.collectionView deselectAll:nil]; 
    } 
} 

- (void)setSelected:(BOOL)selected { 
    [super setSelected:selected]; 
    if (selected) { 
     [self installGestureRecognizer]; 
    } 
    else { 
     [self uninstallGestureRecognizer]; 
    } 
} 

- (void)installGestureRecognizer { 
    [self uninstallGestureRecognizer]; 

    self.clickGestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self 
                      action:@selector(onClick:)]; 
    [self.view addGestureRecognizer:self.clickGestureRecognizer]; 
} 

- (void)uninstallGestureRecognizer { 
    [self.view removeGestureRecognizer:self.clickGestureRecognizer]; 
    self.clickGestureRecognizer = nil; 
} 
Verwandte Themen