2012-03-31 24 views
15

Uygulamamda, görüntüleri çalışma zamanında görünümlerime dinamik olarak ekliyorum. Ekranda aynı anda birden çok görüntü alabilirim. Her görüntü bir nesneden yüklenir. Dokuna dokunduğumda uygun yöntemin çağrılması için resme bir tapGestureRecongnizer ekledim.iOS - UITapGestureRecognizer - Argümanlar ile Seçici

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

Benim sorunum dokundunuz nasıl bir resme bilmiyorum olmasıdır. Ekranda konum almak için tapGestureRecognizer.location'u arayabileceğimi biliyorum, ancak bu bana gerçekten çok iyi değil. İdeal olarak, görüntünün dokunma hareketine yüklendiği nesneyi iletmek istiyorum. Ancak, sadece argüman olarak değil, "imageTapped:" seçici ismini geçebiliyorum.

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

Herkes ben tapGestureRecongnizer içine bir tartışma ya Üzerinde yürütebilirim başka yol olarak benim nesneyi geçebilir bir yol biliyor mu?

Teşekkür

Brian

cevap

26

Neredeyse geldin. UIGestureRecognizer'ın bir görünüm özelliği vardır. Eğer tahsis ve her resim görünümüne bir jest tanıyıcı iliştirirseniz - kod parçacığı yapmak göründüğü gibi - (hedef üzerinde) daha sonra da jest kodu şöyle olabilir: daha az net nedir

- (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]; 
} 

Şimdi gr kodu yapabilirsiniz:

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

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

parlak Thats verdiğiniz kod karşılık gelen ImageView'ın ile size Bitki modeli nesnesini ilişkilendirmek, ama böyle bir şey olabilir nasıl. Bir milyona teşekkürler. Mükemmel çalıştı! Güzel çözüm. –