gpt4 book ai didi

xcode - 单击取消选择 NSCollectionViewItem

转载 作者:行者123 更新时间:2023-12-03 17:09:54 25 4
gpt4 key购买 nike

如何通过再次单击 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
}
}

此代码在单击另一个项目时取消选择,但在单击同一项目时则不会。我想在单击同一项目时取消选择。

最佳答案

您可以通过观察项目的选定状态来实现此目的,并在选择项目时在项目的 View 上安装 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;
}

关于xcode - 单击取消选择 NSCollectionViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38708731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com