2012-06-06 20 views
6

मैं एक समारोह (उदाहरण के function1 के लिए) है, जहां मैं एक बटन और एक वस्तु auxiliarStruct कहा जाता है में addTarget संपत्ति को लागू करने के लिए, और मुझे लगता है कि लाइन है:कैसे एक UIButton

[btn addTarget:self action:@selector(userSelected:) forControlEvents:UIControlEventTouchUpInside]; 

लेकिन @selector में (उपयोगकर्ता चयन) मुझे उस फ़ंक्शन में आवश्यक ऑब्जेक्ट्स के रूप में पास करने की आवश्यकता है, लेकिन मुझे नहीं पता कि इसे कैसे कार्यान्वित किया जाए। मैं घोषणा की है कि यहां पर आपत्ति:

//UsersController.h 
#import <UIKit/UIKit.h> 

@interface UsersController : NSObject{ 
    NSInteger *prof_id; 
    NSString *createTime; 
    NSString *fullName; 
    NSString *thumb; 
} 

@property (nonatomic) NSInteger *prof_id; 
@property (nonatomic, retain) IBOutlet NSString *createTime; 
@property (nonatomic, retain) IBOutlet NSString *fullName; 
@property (nonatomic, retain) IBOutlet NSString *thumb; 

@end 

मैं बुलाया समारोह इस तरह की घोषणा कर दी:

-(void)userSelected:(id)sender{ 
    //CODE 
} 

मैं इस वर्ग की एक वस्तु, auxiliarStruct कहा जाता है और यह है कि मैं जरूरत है। मैं

[btn addTarget:self action:@selector(**userSelected:auxiliarStruct**)forControlEvents:UIControlEventTouchUpInside]; 

साथ करने की कोशिश की लेकिन यह नहीं काम करता है किसी को भी मेरी मदद कर सकते हैं? धन्यवाद।

पुनश्च: मेरी अंग्रेजी के लिए खेद है, मुझे पता है यह बुरा

+1

किस तरह का पैरामीटर? क्या आप एक उदाहरण दे सकते हैं? – Pfitz

+0

अंदर 4 एनएसस्ट्रिंग के साथ अपनी कक्षा का एक ऑब्जेक्ट: उपयोगकर्ता नियंत्रक: एनएसओब्जेक्ट { एनएसआईएनटेगर * prof_id; एनएसएसटींग * createTime; एनएसएसटींग * पूर्ण नाम; एनएसएसटींग * अंगूठे; } –

+0

Pfitz, मैंने सवाल संपादित किया। मुझे उम्मीद है कि अब आप इसे –

उत्तर

18

है आप केवल addTarget @selector विधि के साथ एक पैरामीटर के रूप में एक (UIButton*) वस्तु पारित कर सकते हैं। आप UIButton टैग सेट कर सकते हैं और इसे कॉल किए गए फ़ंक्शन पर उपयोग कर सकते हैं। आप स्ट्रिंग मान भेजने के लिए कोई विकल्प ढूंढना चाह सकते हैं।

बटन के साथ एक टैग पारित करने के लिए नीचे दिए गए कोड का उपयोग करें:

 btn_.tag = 10; 
    [btn_ addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside]; 

बटन कार्रवाई इस तरह दिखना चाहिए:

- (void) functionName:(UIButton *) sender { 

    NSLog(@"Tag : %d", sender.tag); 

} 
+0

के माध्यम से चयन किया गया है, यह काम नहीं करता है, ऑब्जेक्ट एडटेक्चर –

+0

@nanoDev Ok में समर्थित नहीं है। मैं – Vaquita

+0

देखता हूं ठीक है, धन्यवाद नेप्च्यून –

1

घटना पैरामीटर के रूप में बटन भेजेगा, जिससे:

-(void)userSelected:(id)sender { 

      UIButton *button = sender; 
      ... 
    } 
3

मुझे नहीं पता कि आप बटन की कार्रवाई में पैरामीटर जोड़ सकते हैं, मुझे कभी ऐसा मेथ नहीं मिला आयुध डिपो।

हमने सबसे करीबी चीज बटन पर अलग-अलग टैग का चयन करना और टैग के अनुसार कार्यों को अलग करना था।

वैसे भी, यह वास्तव में आपके प्रश्न का उत्तर नहीं है, लेकिन मैं पैरामीटर भेजने की बजाय कक्षा संपत्ति का उपयोग करने के विकल्प के रूप में सुझाव दूंगा। उदाहरण के लिए:

  • आप बटन पर क्लिक करते हैं और आप अपने चयनकर्ता को "test" मान भेजना चाहते हैं। "परीक्षण" भेजने के बजाय आप उस वर्ग की संपत्ति को "परीक्षण" पर सेट करते हैं और आपके चयनकर्ता में आप इसे वहां से पढ़ते हैं। मुझे नहीं पता कि यह आपकी आवश्यकताओं को 100% फिट करता है लेकिन मैं इसे एक विकल्प मानता हूं।

हालांकि आप एक दिलचस्प सवाल उठाते हैं। मैं कोशिश करता हूं और इसे देखता हूं यदि मुझे कभी-कभी इसकी आवश्यकता होगी और यदि मुझे कुछ मिल जाए, तो मैं अपना उत्तर

[संपादित करें] स्पष्ट रूप से आप इस प्रश्न से पूछने वाले अकेले नहीं हैं: How can I pass a parameter to this function? इसमें अगर कोई मानक समाधान भी नहीं था और टैग का इस्तेमाल किया गया था।