2012-03-31 25 views
15

Trong ứng dụng của tôi, tôi tự động thêm hình ảnh vào chế độ xem của mình khi chạy. Tôi có thể có nhiều hình ảnh trên màn hình cùng một lúc. Mỗi hình ảnh được tải từ một đối tượng. Tôi đã thêm tapGestureRecongnizer vào hình ảnh để phương thức thích hợp được gọi khi tôi nhấn vào nó.iOS - UITapGestureRecognizer - Bộ chọn với đối số

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

Vấn đề của tôi là tôi không biết hình ảnh nào tôi đã khai thác. Tôi biết tôi có thể gọi tapGestureRecognizer.location để có được vị trí trên màn hình nhưng điều đó không thực sự tốt với tôi. Lý tưởng nhất, tôi muốn có thể vượt qua đối tượng mà hình ảnh đã được tải từ vào cử chỉ chạm. Tuy nhiên, có vẻ như tôi chỉ có thể chuyển vào tên bộ chọn "imageTapped:" chứ không phải đối số của nó.

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

Có ai biết cách tôi có thể truyền đối tượng của tôi làm đối số vào tapGestureRecongnizer hoặc bất kỳ cách nào khác để tôi xử lý?

Cảm ơn

Brian

Trả lời

26

Bạn sắp hoàn tất. UIGestureRecognizer có thuộc tính chế độ xem. Nếu bạn phân bổ và đính kèm một trình nhận dạng cử chỉ với nhau xem hình ảnh - cũng giống như nó xuất hiện bạn làm trong đoạn mã - sau đó mã cử chỉ của bạn (trên mục tiêu) có thể trông như thế này:

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

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

Có gì chưa rõ ràng từ mã bạn cung cấp là cách bạn kết hợp đối tượng mô hình Nhà máy của bạn với nó IMAGExem tương ứng, nhưng nó có thể là một cái gì đó như thế này:

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

Bây giờ mã gr thể làm điều này:

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

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

Thats rực rỡ. Cảm ơn rất nhiều. Nó hoạt động hoàn hảo! Giải pháp tốt. –

Các vấn đề liên quan