1

NSCollectionViewItem을 다시 클릭하여 어떻게 선택을 해제 할 수 있습니까? 다른 항목을 클릭 할NSCollectionViewItem을 클릭하여 선택 해제

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 
     } 
    } 

이 코드 deslect 있지만 같은 항목이있는 경우 :

내가 선택하고 해제를 위해 사용하는 코드입니다. 같은 항목을 클릭하면 사라지고 싶습니다.

답변

0

하나의 쉬운 속임수는 CMD를 사용하는 것입니다. 왼쪽 마우스를 클릭하십시오. 이것이 내 문제를 정확히 해결하지는 못하지만, 여전히 아무것도 아닌 것보다 낫습니다.

0

항목에서 선택된 상태를 관찰하고 선택한 경우 항목보기에 NSClickGestureRecognizer을 설치하고이 항목이 선택 해제되면 제거 할 수 있습니다.

NSCollectionViewItem 서브 클래스의 어딘가에 다음 코드를 넣어 :

- (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; 
}