2011-03-26 16 views
9

का उपयोग करके अनुभागित एनएसटीबल व्यू मैं NSArrayController और कोको बाइंडिंग का उपयोग करके एक सेक्शन NSTableView बनाने की कोशिश कर रहा हूं। मैं आईओएस में NSFetchedResultsController के साथ एक समान दृष्टिकोण की तलाश में हूं, जहां आप एक सेक्शन कुंजी पथ सेट कर सकते हैं। मैं NSArrayController के साथ कुछ समान बनाना चाहता हूं।एनएसएआरएआरई कंट्रोलर

मैं आपको एक उदाहरण देता हूं: मेरे पास अलग-अलग कार्य हैं। प्रत्येक कार्य में तीन अलग-अलग प्राथमिकताओं में से एक है, कम, मध्यम या उच्च। कार्यों में शीर्षक, विवरण, दिनांक इत्यादि जैसे गुण भी हैं। मैं प्राथमिकता से कार्यों को अनुभाग या समूह करना चाहता हूं (यहां अनुभाग कुंजी पथ प्राथमिकता है)।

क्या आप इस समस्या को बाइंडिंग और NSArrayController के साथ हल कर सकते हैं? क्या मुझे कई NSArrayController या सिर्फ एक की आवश्यकता है?

+0

इस https://developer.apple.com/library/mac/samplecode/TableViewPlayground/Introduction/Intro.html – johndpope

उत्तर

7

हालांकि NSTableView समूह पंक्तियों को प्रस्तुत कर सकता है, दुर्भाग्य से यह पदानुक्रम को फ़्लैट करने के लिए प्रतिनिधि या डेटा स्रोत पर निर्भर करता है। यह UITableView के जैसे वैकल्पिक डेटा स्रोत सेमेन्टिक्स को समझ में नहीं आता है, न ही NSArrayControllerNSFetchedResultsController के अनुभाग विधियों के बराबर है।

एक विकल्प NSOutlineView है जो मनमाने ढंग से गहरे पदानुक्रमित डेटा को प्रदर्शित करने के लिए डिज़ाइन किया गया है, लेकिन यह संभवतः एक साधारण दो-स्तर की संरचना के लिए आवश्यक से अधिक काम करता है। (आप NSTreeController लिए एक रूपरेखा दृश्य बाध्य कर सकते हैं, लेकिन पेड़ नियंत्रक खराब प्रलेखित है, और बूट करने के लिए, यह बुरी तरह से बनाया गया है।)

तो, यहाँ मैं क्या सुझाव है कि है:

  • अपने स्वयं के नियंत्रक वर्ग जो औजार लिखें NSTableViewDelegate और NSTableViewDataSource
  • एक एकल सरणी नियंत्रक का उपयोग करें जो प्राथमिकता से टाइप करता है, और अनुभाग शीर्षकों को समायोजित करने के लिए पंक्ति अनुक्रमणिका को ऑफ़सेट करने के लिए अपना स्वयं का कोड लिखें।
  • अनुभाग शीर्ष पर tableView:isGroupRow: से YES पर लौटें।
  • इस के लिए बाइंडिंग का उपयोग न करें।

आप किसी तीसरे पक्ष से पुन: प्रयोज्य, बाइंडिंग-सक्षम नियंत्रक भी देख सकते हैं।

+0

स्वयं निर्मित अनुभाग शीर्षकों के संयोजन के साथ एनएसटीबलसेल फ़ील्ड के लिए बाइंडिंग का उपयोग करना संभव है! आपको 'NSTableViewDelegate' विधियों को लागू करना चाहिए 'तालिकादृश्य: isGroupRow:' और 'tableView: rowViewForRow:'। आप 'tableview: viewForTableColumn: row' के कार्यान्वयन को छोड़ सकते हैं, यह बाइंडिंग के माध्यम से किया जा सकता है। –

0

आप कर सकते थे उपकरण इस जवाब में बताया गया का उपयोग कर एक sectioned NSTableView को लागू करने का प्रयास करें:

https://stackoverflow.com/a/5369550/893113

0

आप एक कस्टम वर्ग उदाहरणों कि वास्तव में आप चाहते हैं NSTableView की सामग्री रखती है साथ मैन्युअल NSArrayController भरना समूह पंक्तियों सहित, पूरा करें। नियंत्रक सही क्रम में भरा जाना चाहिए। तो इसे समूह हेडर ऑब्जेक्ट से शुरू करना चाहिए, फिर कुछ डेटा ऑब्जेक्ट्स, एक नया हेडर ऑब्जेक्ट, और इसी तरह से। कस्टम क्लास में निम्न गुण होना चाहिए:

  1. समूह शीर्षलेख के लिए स्ट्रिंग मान। शून्य है जब पंक्ति कोई समूह शीर्षलेख नहीं है।
  2. बूलियन मूल्य isGroupHeader। एक आसान tableView:isGroupRow: कार्यान्वयन के लिए आवश्यक है। आपके नियमित डेटा के लिए
  3. NSManagedObject मान। शून्य है जब पंक्ति समूह शीर्षलेख है।

इसके साथ आपके पास सभी एनएसटीबल व्यू प्रतिनिधियों को उचित ढंग से समूहीकृत समूह दृश्य प्राप्त करने के लिए सभी टूल्स हैं।

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