繁体   English   中英

UITapGestureRecognizer和UIButton

[英]UITapGestureRecognizer and UIButton

UITapGestureRecognizerUIButton不能一起使用。

如果没有UITapGesturerecognizer单独的UIButton可以正常工作。 它在所有滚动的图像视图中显示,但是在添加UITapGestureReconizer功能后,在点击时不显示UIButton

BOOL numberofTaps;
@interface ImageScrollViewController : UIViewController <UIGestureRecognizerDelegate>
@property (nonatomic, assign) UITapGestureRecognizer *recognizer;

- (void)handleTap:(UIGestureRecognizer*)sender;
//////////////////////////
- (void)viewDidLoad {
    self.view.backgroundColor = [UIColor blackColor];
    UIScrollView *imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    imageScrollView.pagingEnabled = YES;
    NSInteger numberOfViews = 61;
    for (int i = 0; i < numberOfViews; i++) {
        CGFloat xOrigin = i * self.view.frame.size.width;
        UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [myButton addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside];
        myButton.frame = CGRectMake(xOrigin, 10, 60, 35);
        [myButton.layer setMasksToBounds:YES];
        [myButton.layer setCornerRadius:10.0f];
        myButton.layer.borderWidth = 2;
        myButton.layer.borderColor = [[UIColor whiteColor] CGColor];
        [myButton setTitle:@"Done" forState:UIControlStateNormal];
        myButton.backgroundColor = [UIColor blackColor];
        myButton.hidden = YES;

        NSString *imageName = [NSString stringWithFormat:@"image%d.png", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.frame = CGRectMake(xOrigin, 0, self.view.frame.size.width, self.view.frame.size.height);

        UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        recognizer.numberOfTapsRequired = 1;
        [imageView addGestureRecognizer:recognizer];
        imageView.userInteractionEnabled = YES;
        recognizer.delegate = self;
        numberofTaps = 1;
        [recognizer release];


        [imageScrollView addSubview:imageView];
        [imageScrollView addSubview:myButton];
     // [imageScrollView addGestureRecognizer:tap];
     // [imageView addSubview:tap];
        [imageView release];
    }
    imageScrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);
    [self.view addSubview:imageScrollView];
    [imageScrollView release];
 }

编辑: Howcome这可行,但是当我仅取消注释myButton.hidden = NO时,它可行,但是在imageviews上仍然不显示我的按钮完成

- (void)handleTap:(UIGestureRecognizer*)sender {

   // if(numberofTaps == 1){
    CGPoint tapPoint = [sender locationInView:_imageScrollView];
    int tapX = (int) tapPoint.x;
    int tapY = (int) tapPoint.y;
    NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
//_myButton.hidden = NO;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
[alert show];
[alert release];
}

是什么原因否则它可以正常工作,但不显示完成的UIButton。

首先,您必须找到必须显示的button 因此,在将它们添加到scrollView之前,必须在UIButton上设置setTag: scrollView

像这样 -

myButton.tag = i;

然后再将标签添加到UIImageView然后再将其添加到scrollView如下所示-

 imageView.tag = i*100;

现在在handleTap:方法中,您可以比较标签并获得必须显示的按钮。

-(void)handleTap:(UIGestureRecognizer *)sender 
{
    //getting all buttons of scrollView
    for(UIButton *button in scrollView.subviews)
    {
       //comparing tags
       if(button.tag == sender.view.tag/100)
       {
           button.hidden = NO;
       }
    }
}

为此,删除您的if条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM