7

मैं एक छात्र वर्ग आ रही हैं:चयनित ऑब्जेक्ट NSPopUpButton कैसे प्राप्त करें?

@interface student : NSObject{  
    NSString *name; 
    NSDate *date; 
} 

और मैं छात्रों की सूची के लिए एक NSMutableArray है, और मैं इस

सामग्री की तरह एक NSPopUpButton करने के लिए इसे बाध्य: studentArray, arrangedObjects सामग्री मान: studentArray , arrangedObjects, नाम

अब मैं इस तरह छात्र वस्तु प्राप्त कर सकते हैं:

-(IBAction)studentPopupItemSelected:(id)sender 
{ 
    NSPopUpButton *btn = (NSPopUpButton*)sender; 

    int index = [btn indexOfSelectedItem]; 
    student *std = [studentArray objectAtIndex:index]; 

    NSLog(@"%@ => %@", [std name], [std date]); 
} 

क्या कोई तरीका है कि मैं छात्र ऑब्जेक्ट सीधे एनएसपीओपअप बटन से प्राप्त कर सकता हूं ???? जैसे:

NSPopUpButton *btn = (NSPopUpButton*)sender; 
student *std = (student *)[btn objectValueOfSelectedItem]; 
+0

जिज्ञासा से बाहर, 'आईबीएक्शन' सूचीबद्ध ट्रिगर करने वाला क्या है? –

उत्तर

7

जिस तरह से आप इसे कर रहे हैं वह ठीक है। एक और तरीका है, लेकिन जरूरी नहीं है।

मूल रूप से पॉपअप बटन में मेनू होता है, और मेनू में मेनू आइटम होते हैं।

मेनू आइटम पर representObject नामक एक संपत्ति है, जिसका उपयोग आप किसी छात्र के साथ संबंध बनाने के लिए कर सकते हैं।

इसलिए आप मेनू आइटम बनाकर मैन्युअल रूप से अपना पॉपअप बटन बना सकते हैं और उन्हें अपने मेनू में जोड़ सकते हैं।

3

मुझे विश्वास है कि आप जिस तरह से कर रहे हैं वह सबसे अच्छा है। चूंकि NSPopUpButton आपके सरणी द्वारा पॉप्युलेट किया जा रहा है, इसलिए इसमें वास्तव में वस्तु नहीं होती है, यह केवल यह जानता है कि यह कहां है। व्यक्तिगत तौर पर मैं

-(IBAction)studentPopupItemSelected:(id)sender { 
    student *std = [studentArray objectAtIndex:[sender indexOfSelectedItem]]; 
    NSLog(@"%@ => %@", [std name], [std date]); 
} 

का प्रयोग करेंगे NSPopUpButton पर दस्तावेज़ीकरण को देखने के बाद मुझे यकीन है कि इस वस्तु को प्राप्त करने का सबसे कारगर तरीका है हूँ।

3

मैं "NSMenuDidSendActionNotification" एक बार उपयोगकर्ता NSPopUpButton की NSMenu में approriate NSMenuItem चुना गया है भेज दिया जाता है कि का उपयोग करके समस्या हल हो।

आप पर्यवेक्षक को उदा। इस

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(popUpSelectionChanged:) 
              name:NSMenuDidSendActionNotification 
              object:[[self myPopUpButton] menu]]; 

की तरह "awakeFromNib" आप कई NSPopUpButtons आपको प्रत्येक के लिए एक पर्यवेक्षक रजिस्टर कर सकते हैं। dealloc में पर्यवेक्षक (रों) को दूर करने के लिए मत भूलना:

[[NSNotificationCenter defaultCenter] removeObserver: self]; 

popUpSelectionChanged में आप शीर्षक की जाँच कर सकते तो आप जानते हैं जो मेनू वास्तव में सूचना भेजी है। आप विशेषता निरीक्षक में इंटरफ़ेस बिल्डर में शीर्षक सेट कर सकते हैं।

- (void)popUpSelectionChanged:(NSNotification *)notification {  
    NSDictionary *info = [notification userInfo]; 
    if ([[[[info objectForKey:@"MenuItem"] menu] title] isEqualToString:@"<title of menu of myPopUpButton>"]) { 
     // do useful things ... 
    } 
} 
संबंधित मुद्दे