2012-06-19 16 views
7

मेरे पास एनएसटीबल व्यू में दो कॉलमैन हैं जो 5-10 मानों के साथ नाम और वेतन के रूप में हैं। मैं कॉलम दोनों के शीर्षलेख पर क्लिक करने के बाद इन coloumn को सॉर्ट करना चाहता हूं। इंटरनेट में बहुत सारे डेटा मौजूद हैं लेकिन मैं इनका उपयोग करने में सक्षम नहीं हूं। कोको में ऐसा करने में मेरी मदद करें।छंटनी NSTableView

अग्रिम धन्यवाद और किसी भी मदद की सराहना करते हैं।

+0

मैं तालिका में दो स्तंभ है, नाम और वेतन के रूप में, मैं मान डाल बाध्यकारी के बिना हार्डकोडेड, अब मैं डेटा सॉर्ट करना चाहता हूं, मैं यह कार्य कैसे करता हूं। – upender

उत्तर

12

हर तालिका स्तंभ (आदि आरोही, उतरते, अनदेखी मामले) एक विधि setSortDescriptorPrototype क्रमबद्ध वर्णनकर्ता सरणी कैसे खुद को सॉर्ट करने के लिए कह रही के तरीके हैं स्तंभों में से प्रत्येक पर दोहराएं आप के रूप में sortable चाहते हैं और यह विधि कॉल है उन स्तंभों में से प्रत्येक के लिए, और आवश्यक प्रकार वर्णनकर्ता पारित

for (NSTableColumn *tableColumn in tableView.tableColumns) { 

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)]; 
    [tableColumn setSortDescriptorPrototype:sortDescriptor]; 
} 

प्रवर्तन कोड के इस टुकड़े लिखने के बाद, NSTableViewDelegate एक विधि - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors है कि आप जब भी एक तरह से सूचित करता है (मेरे मामले में मैं स्तंभ पहचानकर्ता का उपयोग किया जाएगा) वर्णनकर्ता बदल गया है, प्रतिनिधि में इस विधि को लागू करें और डेटा एआर को एक संदेश भेजें ay ही सुलझाने के लिए

- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors]; 
    [aTableView reloadData]; 
} 

इस विधि हर बार एक स्तंभ शीर्ष लेख क्लिक किया जाता है निकाल दिया जाएगा, और NSTableColumn छँटाई आदेश दिखा एक अच्छी छोटी त्रिकोण को दर्शाता है।

6

मैंने इस सवाल पर ठोकर खाई, जबकि कुछ ऐसा करने के सबसे आसान तरीके की तलाश में। हालांकि मूल प्रश्न पुराना है, मुझे आशा है कि किसी को मेरा जवाब उपयोगी लगेगा! कृपया ध्यान दें कि मैं Xcode 5.1.1

ठीक है तो यह करने के लिए उपयोग कर रहा हूँ आप की जरूरत है:

  1. वास्तविक स्तंभ आप अपनी तालिका में सॉर्ट करने के लिए चाहते हैं।
  2. अपने गुण इंस्पेक्टर में आपको दो फ़ील्ड भरने की आवश्यकता है: सॉर्ट कुंजी और चयनकर्ता।
  3. सॉर्ट कुंजी फ़ील्ड में, आपको अपने पहचानकर्ता का मान दर्ज करना होगा। आपके पहचानकर्ता का मूल्य आपकी पहचान निरीक्षक में स्थित है।
  4. चयनकर्ता फ़ील्ड में आपको कॉलम में ऑब्जेक्ट प्रकार के आधार पर एक उपयुक्त चयनकर्ता विधि दर्ज करने की आवश्यकता है। डिफ़ॉल्ट विधि है; तुलना करें:

मैक के लिए टेबल व्यू प्रोग्रामिंग मार्गदर्शिका के आधार पर। तुलना: विधि एनएसएसटींग, एनएसडीएटी, और एनएसएनंबर वस्तुओं के साथ काम करती है। यदि आपके टेबल कॉलम में केवल स्ट्रिंग हैं, तो आप केस इन्सेंसिटिव कॉम्पैयर का उपयोग करने पर विचार करना चाहेंगे: यदि केस संवेदनशीलता महत्वहीन है तो विधि। हालांकि, स्थानीय विधि के साथ इन विधि हस्ताक्षरों को प्रतिस्थापित करने पर विचार करें: या स्थानीयकृत CaseInsensitiveCompare: उपयोगकर्ता की भाषा आवश्यकताओं को ध्यान में रखने के तरीके। नीचे दिखाया गया प्रारूप में अपने टेबल देखें नियंत्रक में विधि: sortDescriptorsDidChange:

अंत में, आप tableView घोषित करने के लिए की जरूरत है

-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    [listArray sortUsingDescriptors: [mtableView sortDescriptors]]; 
    [tableView reloadData]; 
} 
+1

सॉर्ट कुंजी फ़ील्ड डेटा ऑब्जेक्ट में एक गुण होना चाहिए, कॉलम के पहचानकर्ता नहीं। (हालांकि वे वही हो सकते हैं) – tagy22

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