7

मैंने मैक ओएस एक्स शेर के लिए अपने नए व्यू-आधारित एनएसटीबल व्यू का उपयोग करके एक ऐप विकसित किया है, लेकिन जैसा कि मैं पूरे ऐप को हिम तेंदुए में बंद करना चाहता हूं, मैं इस तरह के टेबलव्यू को अनुकरण करने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं। अब तक मैंने एक एनएससीओलेक्शन व्यू बनाया है और सबकुछ ठीक है, इस तथ्य को छोड़कर कि मुझे उस दृश्य की अनुक्रमणिका नहीं मिल सकती है, जिससे बटन क्लिक ईवेंट ट्रिगर होता है। शेर में मैं निम्नलिखित कार्य हो:एनएससीओलेक्शन व्यू के अंदर एक दृश्य का सूचकांक प्राप्त करें?

- (IBAction)buttonClick:(id)sender 

तो मैं tableview एक विधि का उपयोग कर अंदर देखने का सूचकांक (मैं अपने नाम याद नहीं है) की तरह

- (NSInteger)rowForView:(NSView *)aView 
aView साथ

प्राप्त कर सकते हैं प्रेषक के superview किया जा रहा है, लेकिन मैं संग्रह देखने के लिए कुछ इसी तरह नहीं मिला ... केवल "उपयोगी" विधि

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index 

(या कुछ इस तरह), लेकिन हो रहा है यह मेरी मदद नहीं कर सकता क्योंकि यह एक एनएससीओलेक्शन व्यूइटम देता है और मैं केवल इसी दृश्य को जानने के लिए इसे एक्सेस नहीं कर सकता!

उत्तर

4

buttonClick के भीतर, इस कोड की कोशिश करो! उन दोनों दृष्टिकोणों में समस्याएं हैं। मैं देख सकता हूं कि पहला चालू कैसे काम कर सकता है, लेकिन ध्यान दें कि "संग्रह दृश्य Item" वास्तव में दृश्य है, संग्रह ViewItem नहीं, जो दृश्य नियंत्रक है।

दूसरा तरीका काम नहीं करेगा, जब तक कि आप बटन को उपclass न करें और संग्रह ViewItem के लिए एक बैक लिंक डालें। अन्यथा, आपका विचार यह नहीं जानता कि संग्रह ViewItem इसे नियंत्रित करता है। आपके सरणी में सही ऑब्जेक्ट को क्रिया प्राप्त करने के लिए, आपको संग्रह ViewItem के प्रतिनिधित्व ऑब्जेक्ट के बजाय बाध्यकारी चयनकर्ता का उपयोग करना चाहिए।

+1

मुझे विश्वास नहीं है, ऐसा लगता है! मुझे यकीन नहीं है कि यह हासिल करना सबसे अच्छा था (ऐप्पल को एक बेहतर तरीका लागू करना चाहिए था) लेकिन फिर भी यह मेरी समस्या हल करता है। आपको बहुत - बहुत धन्यवाद! – Nickkk

+1

चेतावनी का एक शब्द: दृश्य आइटम पुन: व्यवस्थित होने के बाद यह अब और काम नहीं करता है (उदाहरण के लिए यदि आप ड्रैग और ड्रॉप द्वारा पुनर्व्यवस्थित करने का समर्थन करते हैं)। – Mark

1

कैसे की तरह कुछ के बारे में:

id collectionViewItem = [sender superview]; 
NSInteger index = [[collectionView subviews] indexOfObject:collectionViewItem]; 
return index; 

आशा इस मदद करता है :)

+0

जैसा कि मैंने कहा था, मैं केवल इसे देखने वाले दृश्य को जानने के लिए collectonViewItem तक नहीं पहुंच सकता ... – Nickkk

2

geesh:

id obj = [collectonViewItem representedObject]; 
NSInteger index = [[collectionView contents] indexOfObject:obj]; 
0

के रूप में मैं यहाँ का सुझाव दिया: How to handle a button click from NSCollectionView

मैं इसे इस तरह करना होगा (क्योंकि बटन दबाते हैं करना चाहते हैं इसी मॉडल, इसलिए प्रतिनिधित्व किया वस्तु के साथ मिलकर किया जाना चाहिए):

  1. एक जोड़े अपने collectionViewItem के मॉडल के लिए विधि (जैसे buttonClicked)
  2. बाध्य करने के लिए संग्रह देखें मद बटन लक्ष्य
  3. जबकि करने के लिए सेट मॉडल कुंजी पथ बाध्यकारी: representedObject
  4. +०१२३५१६४१०६१
  5. बाध्यकारी सेट selectorname को: विधि विधि जिसे आपने पहले चुना था (उदा। buttonClicked)
  6. अपने मॉडल में प्रोटोकॉल जोड़े, यदि आप NSCollectionView के लिए बाध्य के लिए प्रतिनिधि
0
  1. उपयोग NSArrayController बताना होगा या स्थापित पर्यवेक्षक पैटर्न,

  2. उपयोग collectonViewItem.representedObject एक कस्टम प्राप्त करने के लिए आपके द्वारा परिभाषित मॉडल।

  3. सहेजें और अपने कस्टम मॉडल में इंडेक्स प्राप्त करें।

यह मेरे लिए काम करता है।

संबंधित मुद्दे