एक दृष्टिकोण जिसका मैंने उपयोग किया है, प्रासंगिक मेनू क्रियाओं को उस विशिष्ट आइटम पर लागू करने का प्रयास नहीं करना है जिसे क्लिक किया गया था लेकिन चयनित आइटम पर। और मैं क्लिक-ऑन आइटम को स्वयं चयन में जोड़ता हूं।
मैंने संग्रह आइटम दृश्य के लिए एक कस्टम दृश्य का उपयोग किया। कस्टम व्यू क्लास में आउटलेट, item
है, जो अपने स्वयं के संग्रह दृश्य आइटम पर है, जिसे मैं एनआईबी में जोड़ता हूं। यह भी -rightMouseDown:
ओवरराइड करता है आइटम चयन करने के लिए अपने आप को जोड़ने के लिए:
- (void) rightMouseDown:(NSEvent*)event
{
NSCollectionView* parent = self.item.collectionView;
NSUInteger index = NSNotFound;
NSUInteger count = parent.content.count;
for (NSUInteger i = 0; i < count; i++)
{
if ([parent itemAtIndex:i] == self.item)
{
index = i;
break;
}
}
NSMutableIndexSet* selectionIndexes = [[parent.selectionIndexes mutableCopy] autorelease];
if (index != NSNotFound && ![selectionIndexes containsIndex:index])
{
[selectionIndexes addIndex:index];
parent.selectionIndexes = selectionIndexes;
}
return [super rightMouseDown:event];
}
यदि आप चाहें, बल्कि चयन में आइटम जोड़ने की तुलना में, आप देख सकते हैं कि यह चयन में पहले है। यदि ऐसा है, तो चयन को संशोधित न करें। यदि ऐसा नहीं है, को केवल आइटम के साथ चयन (इसे केवल एकमात्र चयनित आइटम) के साथ बदलें।
वैकल्पिक रूप से, आप संग्रह दृश्य के बजाय आइटम दृश्यों पर एक प्रासंगिक मेनू सेट कर सकते हैं। फिर, मेनू आइटम आइटम दृश्य या संग्रह दृश्य आइटम को लक्षित कर सकते हैं।
आखिरकार, आप NSCollectionView
उपखंड कर सकते हैं और -menuForEvent:
ओवरराइड कर सकते हैं। आप अभी भी super
पर कॉल करेंगे और मेनू लौटाएंगे, लेकिन आप ईवेंट और/या आइटम को अपने स्थान पर रिकॉर्ड करने का अवसर ले सकते हैं।
- (NSMenu*) menuForEvent:(NSEvent*)event
{
_clickedItemIndex = NSNotFound;
NSPoint point = [self convertPoint:event.locationInWindow fromView:nil];
NSUInteger count = self.content.count;
for (NSUInteger i = 0; i < count; i++)
{
NSRect itemFrame = [self frameForItemAtIndex:i];
if (NSMouseInRect(point, itemFrame, self.isFlipped))
{
_clickedItemIndex = i;
break;
}
}
return [super menuForEvent:event];
}
स्रोत
2014-10-01 05:49:48
सुंदर !!! आपको बहुत - बहुत धन्यवाद! –
इस तरह से बहुत जटिल है। क्या आपने अपने संग्रह दृश्य के मेनू आउटलेट को अपनी निब फ़ाइल से मेनू में सेट करने का प्रयास किया है? मेनू के लिए प्रतिनिधि के रूप में अपने नियंत्रक ऑब्जेक्ट को सेट करें। प्रत्येक बार मेनू को बुलाया जाता है, संग्रह दृश्य में चयन के अनुसार अपना मेनू अपडेट करें। – iljawascoding
मुझे वास्तव में 'एनएससीओलेक्शन व्यू' उप-वर्ग दृष्टिकोण पसंद है - 'एनएसटीबल व्यू' के साथ व्यवहार की अच्छी स्थिरता देता है। –