2012-03-31 15 views
15

मेरे ऐप में मैं रनटाइम पर अपने दृश्य में गतिशील रूप से छवियां जोड़ रहा हूं। मेरे पास एक ही समय में स्क्रीन पर एकाधिक छवियां हो सकती हैं। प्रत्येक छवि किसी ऑब्जेक्ट से लोड होती है। मैंने छवि में एक tapGestureRecongnizer जोड़ा है ताकि जब मैं इसे टैप करता हूं तो उपयुक्त विधि को कॉल किया जाता है।आईओएस - UITapGestureRecognizer - तर्क के साथ चयनकर्ता

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)]; 
    [plantImageView addGestureRecognizer:tapGesture]; 

मेरी समस्या यह है कि मुझे नहीं पता कि मैंने किस छवि को टैप किया है। मुझे पता है कि मैं स्क्रीन पर स्थान प्राप्त करने के लिए tapGestureRecognizer.location पर कॉल कर सकता हूं लेकिन यह मेरे लिए वास्तव में बहुत अच्छा नहीं है। आदर्श रूप से, मैं ऑब्जेक्ट को पास करने में सक्षम होना चाहता हूं कि छवि को टैप इशारा में से लोड किया गया था। हालांकि, ऐसा लगता है कि मैं केवल चयनकर्ता नाम "imageTapped:" में पास करने में सक्षम हूं और इसके तर्क नहीं।

- (IBAction)imageTapped:(Plant *)plant 
{ 
    [self performSegueWithIdentifier:@"viewPlantDetail" sender:plant]; 
} 

किसी को भी एक तरीका है कि मैं tapGestureRecongnizer में एक बहस या किसी अन्य तरह से मैं उस पर एक संभाल प्राप्त कर सकते हैं के रूप में मेरी वस्तु पारित कर सकते हैं के बारे में पता है?

धन्यवाद

ब्रायन

उत्तर

26

आप बहुत करीब हैं। UIGestureRecognizer एक दृश्य संपत्ति है। आप आवंटित और प्रत्येक छवि को देखने के लिए एक इशारा पहचानकर्ता संलग्न करते हैं - यह आप कोड स्निपेट में क्या दिखाई देता है बस के रूप में - तो आपके इशारे कोड (लक्ष्य पर) इस तरह दिख सकता:

- (void) imageTapped:(UITapGestureRecognizer *)gr { 

    UIImageView *theTappedImageView = (UIImageView *)gr.view; 
} 

क्या से कम स्पष्ट है

NSArray *myPlants; 

for (i=0; i<myPlants.count; i++) { 
    Plant *myPlant = [myPlants objectAtIndex:i]; 
    UIImage *image = [UIImage imageNamed:myPlant.imageName]; // or however you get an image from a plant 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; // set frame, etc. 

    // important bit here... 
    imageView.tag = i + 32; 

    [self.view addSubview:imageView]; 
} 

अब जीआर कोड ऐसा कर सकते हैं:

- (void) imageTapped:(UITapGestureRecognizer *)gr { 

    UIImageView *theTappedImageView = (UIImageView *)gr.view; 
    NSInteger tag = theTappedImageView.tag; 
    Plant *myPlant = [myPlants objectAtIndex:tag-32]; 
} 
+0

शानदार Thats कोड आपके द्वारा दी गई कि कैसे आप अपने संयंत्र मॉडल वस्तु सहयोगी यह इसी imageView के साथ है, लेकिन यह कुछ इस तरह हो सकता है। बहुत - बहुत धन्यवाद। यह पूरी तरह से काम किया! अच्छा समाधान –

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