2011-11-23 11 views
5

मैं शेर में पेश किए गए दृश्य-आधारित एनएसटीबल व्यू के साथ काम करने के नीचे दिखाए गए तालिका लेआउट को प्राप्त करने का प्रयास कर रहा हूं।दृश्य-आधारित NSTableView में पंक्ति-अवधि कैसे जोड़ें?

सेल-आधारित एनएसटीबल व्यू के लिए वर्णित कई दृष्टिकोण थे, उदा। Mimic the artwork column, लेकिन ये वास्तव में दृश्य आधारित तालिका दृश्यों के लिए लागू नहीं होते हैं।

विचार यह है कि तालिका एक (या अधिक) कॉलम फैलाने वाली पंक्तियों में ऑब्जेक्ट्स की एक सरणी द्वारा पॉप्युलेट हो जाती है जो दर्शाती है कि ऑब्जेक्ट्स कुछ डेटा साझा करते हैं। numberOfRowsInTableView: आइटम की कुल संख्या (संलग्न छवि के मामले में 1 9) पर लौटाता है।

क्या किसी ने ऐसा कुछ करने की कोशिश की है?

लेआउट

Groups/sections displayed using spanning rows

उत्तर

5

मैं द्वारा दो अलग एनएसटीबल व्यू का उपयोग करके ऐसा करने में सक्षम था जिसमें उनके एनएसएसक्रॉल व्यू की स्क्रॉलिंग सिंक्रनाइज़ है। एकाधिक स्क्रॉल व्यू (सटीक सबक्लास कोड के साथ) को सिंक्रनाइज़ करने के तरीके को जानने के लिए Scroll View Programming Guide for Mac - Synchronizing Scroll Views

मेरे पास groupTableView है जिसमें एक कॉलम है और समूह का प्रतिनिधित्व करने वाले विचार दिखाता है। मेरे पास itemTableView भी है जिसमें समूह के आइटम का प्रतिनिधित्व करने वाले कॉलम हैं। मैं एक ही प्रतिनिधि/डेटासोर्स विधियों का उपयोग करता हूं, यदि अन्य एनएसटीबल व्यू का उपयोग किया जा रहा है और पंक्तियों, सेल व्यू इत्यादि के उचित # के साथ प्रतिक्रिया दें। इसके अतिरिक्त, मैं समूह तालिका को समायोजित करने के लिए निम्नलिखित प्रतिनिधि विधि को लागू करता हूं दृश्य की पंक्ति की ऊँचाई बराबर होना समूह में पंक्तियों की आइटम पंक्ति ऊंचाइयों का योग:

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row 
{ 
    if (tableView == self.groupTableView) { 
     NSUInteger firstRowIndexForGroup = ...; 
     NSUInteger lastRowIndexForGroup = ...; 
     CGFloat groupHeight = 0.0; 
     for (NSUInteger currentRowIndex = firstRowIndexForGroup; currentRowIndex <= lastRowIndexForGroup; currentRowIndex++) { 
      groupHeight += [self.itemTableView rectOfRow:lastRowIndexForGroup].size.height; 
     } 
     return groupHeight - [self.itemTableView intercellSpacing].height; 
    } else { 
     return self.itemTableView.rowHeight; 
    } 
} 

तुम भी -noteHeightOfRowsWithIndexesChanged: हर बार कॉल करना होगा तालिका दृश्य क्योंकि ऊंचाई की संख्या के अनुसार बदलता है एक समूह को देखने की जरूरत है समूह में पंक्तियां

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    if (tableView == self.groupTableView) { 
     GroupRowView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 
     // configure view 
     [tableView noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndex:row]]; 
     return view; 
    } else { 
     ItemRowView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 
     // configure view 
     return view; 
    } 
} 

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

+0

ओह वाह ... यह निश्चित रूप से एक समाधान है जो वास्तव में मेरे दिमाग को पहली बार नहीं दबाएगा! सिंक्रनाइज़ स्क्रॉलिंग के साथ काम करने से पहले मैं देख सकता हूं कि यह कैसे काम करता है। शायद जोड़ने के लिए एक बात यह है कि यदि समूह सेल क्लिक/चयनित हो जाता है तो उसे आइटम तालिका दृश्य की पहली पंक्ति में चयन को 'अग्रेषित' करना होगा। – klotz

+0

आप समूह तालिका दृश्य को वैकल्पिक रूप से प्रति पंक्ति में दो पंक्तियों को विभाजित करने के लिए विभाजित कर सकते हैं, इस प्रकार आप शीर्ष पंक्ति को दूसरों के ऊपर फ़्लोट कर सकते हैं, इसलिए यदि आपके पास एक बड़ा समूह है, तो आपकी समूह जानकारी अंतिम समूह आइटम स्क्रॉल होने तक फ़्लोट हो जाती है स्क्रीन। – Andrew

+0

समूह तालिका के साथ आइटम तालिका की पंक्तियों को रखने के लिए आप क्या आए थे? आप आइटम पंक्तियों को अपनी पंक्तियों को क्रमबद्ध करने से कैसे रखते हैं ताकि वे उस समूह के अनुरूप न हों जो वे आगे हैं? – erynofwales

0

आप एक NSOutlineView बजाय का उपयोग नहीं कर सकता है? यह विशेष रूप से समूह समर्थन के लिए डिज़ाइन किया गया है।

+0

लेकिन आप समूह की कीमत को सेल में कैसे प्राप्त करेंगे, इसकी ऊंचाई इसकी सभी पंक्तियों के उपयोग के बजाय सभी बच्चे नोड पंक्तियों की कुल ऊंचाई होगी? – klotz

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