2010-12-13 16 views
6

tôi có một vài UIImageView, mỗi thẻ có một thẻ; và tôi có một loạt các hình ảnh, những gì tôi muốn làm là: khi người dùng chạm vào một trong UIImageView, ứng dụng sẽ trả lại một số hình ảnh nhất định từ mảng.cách nhận thẻ của UIImageView tôi đang nhấn?

tôi thực hiện như thế này:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [self.view addSubview:scroll]; 

    NSInteger i; 
    for (i=0; i<8; i++) 
    { 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
     imageView.backgroundColor = [UIColor blueColor]; 
     imageView.userInteractionEnabled = YES; 
     imageView.tag = i; 

     NSLog(@"%d", imageView.tag); 

     [scroll addSubview:imageView]; 

     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(findOutTheTag:)]; 
     [imageView addGestureRecognizer:tap]; 

    } 

    scroll.contentSize = CGSizeMake(320, 115*i); 

} 
- (void)findOutTheTag:(id)sender 
{ 

    // HOW TO FIND THE tag OF THE imageView I'M TAPPING? 

} 

Tôi muốn tìm ra imageView.tag, và vượt qua imageView.tag để

UIImageView *tappedImage = [imageArray objectAtIndex:imageView.tag]; 

để hiển thị hình ảnh.

Tôi đã gắn thẻ tất cả chúng, câu hỏi là làm thế nào tôi có thể tìm ra số tag của imageView mà tôi đang nhấn? cảm ơn bạn đã đọc^_^

Trả lời

12

Có nguy cơ đưa ra đề xuất mà không nhìn thấy bức tranh đầy đủ về ứng dụng của bạn, tại sao không sử dụng UIButton tùy chỉnh thay vì UIImageViews cho điều này? Với UIButton bạn có thể thiết lập một hành động và chuyển id người gửi, từ đó bạn có thể dễ dàng truy cập các thẻ của bạn và lấy dữ liệu từ mảng của bạn.

HOẶC nếu bạn thực sự muốn sử dụng đoạn code trên và bí quyết của bạn cho một thực tế - (void) findOutTheTag: (id) phương pháp người gửi đã được gọi, tất cả các bạn phải làm là:

- (void)findOutTheTag:(id)sender { 
    switch (((UIGestureRecognizer *)sender).view.tag)  
{ 
    case kTag1: 
    //... 
    case kTag2: 
    //... 
    } 
} 
+1

Người gửi ở đây là trình nhận dạng cử chỉ để bạn thực sự phải thực hiện 'chuyển ((người gửi UIGestureRecognizer *)) .view.tag)'. – Anna

+0

@aBitOnhấp tốt! – Rog

+3

+1 - (void) childTapped: (UITapGestureRecognizer *) tapGesture {int tag = tapGesture.view.tag;} // làm việc cho tôi – HDdeveloper

2

Thay vì sử dụng UIImageView tại sao bạn không sử dụng UIButton. Bằng cách đó bạn có thể chỉ cần thêm một người nghe cho các sự kiện UITouchDown. Bạn có thể gắn thẻ mỗi nút để trong phương thức touchDown của bạn, bạn có thể tìm thấy nút nào được nhấn.

UIButton *button = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
    button.backgroundColor = [UIColor blueColor]; 
    button.tag = i; 
    [button addTarget:self action:@selector(touchDown:) controlEvent:UIControlEventTouchDown]; 

Và bên trong phương thức touchDown: bạn chỉ cần truyền người gửi đến UIButton để truy cập thẻ.

- (void)touchDown:(id)sender 
{ 
    UIButton* button = (UIButton*)sender; 
    switch(button.tag) 
    { 
     case TAG1: 
      break; 
     //etc 
    } 
} 
+0

cảm ơn bạn, DHamrick, tôi đã thử UIButton thay vì UIImageView, và nó xuất ra thẻ hoàn hảo, đã giúp tôi nhảy ra khỏi suy nghĩ của riêng tôi, nhưng bằng cách sử dụng UIButton có thể dẫn đến thực hiện rất nhiều cử chỉ để đạt được các cử chỉ khác như longPress và swipe tôi cần sử dụng, để di chuyển/xóa viewItem (cũng tag và mảng liên quan), nó có thể trở nên phức tạp trong xây dựng của tôi, vì UIGestureRecognizer đã có chúng, tôi quyết định sử dụng chúng, dù sao, cảm ơn bạn rất nhiều vì đã giúp đỡ, tôi sẽ gửi ứng dụng cho bạn.^_ ^ – flutewang

1

Để tìm ra hình ảnh có được cảm ứng, sử dụng touchBegan phương pháp:

Lưu ý: Trước hết bạn cần phải xác nhận về quan điểm hình ảnh nên userIntrectionEnabled=YES; Bây giờ sử dụng phương pháp này:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{ 
    // get touch event 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    if ([touch view].tag == 800) { 

    //if image tag mated then perform this action  
    } 
} 

Bạn có thể sử dụng bảng chuyển đổi bên trong touchBegan.

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