2012-06-27 28 views
8

मैं एक NSDictionary कि सभी डेटा रखती है:जारी करना एक viewbased NSTableView

  • एक शीर्षक (इस प्रश्न के लिए महत्वपूर्ण नहीं)
  • एक लिंक (इस प्रश्न के लिए महत्वपूर्ण नहीं)
  • एक NSDictionary की सरणी फिर से युक्त 1 शीर्षक और 1 लिंक

मैं इस तरह एक दृश्य के आधार पर तालिका दृश्य में इस डेटा प्रदर्शित कर रहा हूँ:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tv 
{ 
    if (tv == _downloadTable) 
    //I use this "if" because I have another tableView that has nothing to do 
    //with this one 
    { 
     return [[myDictionary objectForKey:@"myArray"] count]; 
    } 
} 

मुझे इस tableView में 2 कॉलम चाहिए, एक शीर्षक और एक चेकबॉक्स के साथ एक प्रदर्शित करने के लिए, जो कुछ मुझे बताएगा कि कौन सी पंक्ति की जांच की गई है।

- (NSView *)tableView:(NSTableView *)tv viewForTableColumn :(NSTableColumn *)tableColumn row :(NSInteger)row 
{ 
    if (tv == _downloadTable) 
    { 
     if (tableColumn == _downloadTableTitleColumn) 
     { 
      if ([[[myDictionary   objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"]) 
      { 
      NSString *title = [[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"]; 
      NSTableCellView *result = [tv makeViewWithIdentifier:tableColumn.identifier owner:self]; 
      result.textField.stringValue = title; 
      return result; 
      } 
     } 
     if (tableColumn == _downloadTableCheckColumn) 
     { 
      NSLog(@"CheckBox"); //I wanted to see exactly when that was called 
           //But it didn't help me :(
      NSButton *button = [[NSButton alloc]init]; 
      [button setButtonType:NSSwitchButton]; 
      [button setTitle:@""]; 
      return button; 
     } 
    } 
} 

अभी जब मैं इसे चलाने के लिए और चेकबॉक्स पर क्लिक करें क्योंकि मैं यह कैसे कुछ करना। कहाँ मैं कोड है कि कुछ करना चाहिए रखना चाहिए बनाने के लिए पता नहीं है कुछ भी नहीं (बेशक करता है?

मुख्य लक्ष्य सही प्रत्येक लाइनों पर शीर्षक के बगल में डाउनलोड की एक संपादन योग्य सूची है, अभी सूची प्रदर्शित होती है, चेकबॉक्स साथ। मुझे पता है कि जो चेकबॉक्स चेक किया जाता है और कौन-सी नहीं करना चाहते हैं।

मैंने कोशिश की:

[button setAction:@selector(checkBoxAction:)]; 

- (void)checkBoxAction: (id)sender 
{ 
    NSLog(@"I am button : %@ and my state is %ld", sender, (long)[sender state]); 
} 

लेकिन मुझे पता नहीं है कि इस बटन की पंक्ति कैसे प्राप्त करें, यह जानने के लिए कि कौन सा शीर्षक इस चेकबॉक्स से जुड़ा हुआ है।

मैंने सफलता के बिना tableView की setObjectValue विधि भी कोशिश की।

तरह से मैं यह काम करने के लिए चाहते हैं:

मैं एक "डाउनलोड करना शुरू" बटन है कि यदि प्रत्येक बॉक्स या केवल जाँच की पंक्ति के साथ की जाँच नहीं की और अगली कार्रवाई (डाउनलोड) को लॉन्च कर रहा है की जाँच की है।

मैं बाइंडिंग से बचना चाहता हूं क्योंकि मैं इसे आईओएस पर भी काम करने की योजना बना रहा हूं और मैं आईओएस के लिए अलग कोड नहीं चाहता हूं।

उत्तर

1

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

Detecting which UIButton was pressed in a UITableView

[EDIT1]

लोगों को वास्तव में जुड़े हुए पोस्ट पढ़ने के लिए फैसला किया है, तो आपको पता होता है कि इस सवाल का जवाब वास्तव में नहीं है।

कोशिश जोड़ने:

[button setTag:row]; 
[button addTarget:self action:@selector(checkBoxAction:) forControlEvents:UIControlEventTouchUpInside]; 

अपने viewForTableColumn दिनचर्या के किसी और के अंदर:

अपने checkBoxAction दिनचर्या में:

- (void)checkBoxAction: (id)sender{ 
    NSLog(@"I am button : %@ and my state is %@", sender.tag, [sender state]); 
} 

मैं भी लगता है कि एक बार आप अपने कोड में आगे खुदाई शुरू , आप TableViewCell ऑब्जेक्ट्स की ऑटो-डेक्यूइंग क्षमता का उपयोग शुरू करना चाहते हैं। मेरा मानना ​​है कि आप खुद को स्मृति आवंटन/डेलोक समस्या में ढूंढने जा रहे हैं।

- (void)checkBoxAction:(id)sender 
{ 
    NSInteger row = [_downloadTable rowForView:sender]; 
    NSLog(@"The button at row %ld was clicked.", row); 
} 

यहाँ NSTableView के लिये दस्तावेज हैं:

+0

मैंने अस्वीकार नहीं किया:/मैं वास्तव में उस पोस्ट को पढ़ रहा हूं जिसे आपने अभी – ItsASecret

+0

से जोड़ा है, आपको मेरे पोस्ट में किए गए सरल संपादन करने में सक्षम होना चाहिए, जो आपको नेगा के लिए जरूरी नहीं था tion। आपको अभी भी डेकिंग के माध्यम से सोचने की आवश्यकता होगी !!! – trumpetlicks

+0

यहां कस्टम यूआईटीबल व्यू ड्राइंग पर एक शानदार लिंक भी है, डेक सामान से भी बात करता है !!! http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html – trumpetlicks

3

आप कुछ इस तरह होगा आपके मामले में पंक्ति एक विशेष दृश्य में है पाने के लिए NSTableView विधि -rowForView: उपयोग कर सकते हैं

।: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

+0

मैं वास्तव में इसका परीक्षण नहीं कर सकता क्योंकि मैं अब इस पर काम नहीं कर रहा हूं लेकिन वैसे भी धन्यवाद! – ItsASecret