Objective c 捕获动态按钮点击ios
我已经在UIImageView中以编程方式创建了按钮。此视图也是通过编程方式创建的。点击此视图中的图像时,按钮被创建,现在我想捕捉点击此按钮的时间,但我无法确定这是我的相关代码:Objective c 捕获动态按钮点击ios,objective-c,ios,ios5,Objective C,Ios,Ios5,我已经在UIImageView中以编程方式创建了按钮。此视图也是通过编程方式创建的。点击此视图中的图像时,按钮被创建,现在我想捕捉点击此按钮的时间,但我无法确定这是我的相关代码: - (void)imageTapped:(UIGestureRecognizer *)sender{ MyImageView *myView = (MyImageView *)sender.view; NSLog(@"Image tapped is => %@", myView.currentI
- (void)imageTapped:(UIGestureRecognizer *)sender{
MyImageView *myView = (MyImageView *)sender.view;
NSLog(@"Image tapped is => %@", myView.currentImageName);
//add button to view
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self
action:@selector(pressedPlay:)
forControlEvents:UIControlEventTouchDown];
//button image
UIImage *backgroundImage = [UIImage imageNamed:[NSString stringWithFormat:@"playbutton.png"]];
button.frame = CGRectMake(85.0, 175.0, backgroundImage.size.width, backgroundImage.size.height);
myView.userInteractionEnabled = YES;
button.userInteractionEnabled = YES;
[button setImage:backgroundImage forState:(UIControlStateNormal)];
[myView addSubview:button];
}
现在,此代码应该处理tap,但由于某些原因,它没有:
- (void)pressedPlay:(UIGestureRecognizer *)sender{
//MyImageView *senderView = (MyImageView *) sender.view;
NSLog(@"%@", @"I Presed button");
}
这不起作用的原因是什么?从以下位置设置按钮框:
button.frame = CGRectMake(85.0, 175.0, backgroundImage.size.width, backgroundImage.size.height);
致:
看起来您在imageview的框架外设置按钮框架,因此按钮实际上没有获得任何交互。从以下位置设置按钮框架:
button.frame = CGRectMake(85.0, 175.0, backgroundImage.size.width, backgroundImage.size.height);
致:
看起来您正在将按钮框设置在imageview的框之外,因此按钮实际上没有得到任何交互。按钮框很可能将按钮设置在UIImageView的边界之外,在这种情况下,框始终是相对于UIImageView的SuperView坐标的 按钮框很可能将按钮设置在UIImageView的边界之外,在这种情况下,框总是相对于UIImageView的SuperView坐标 您的代码表明您正在使用
UIGestureRecognitizer
(很可能是UITapGestureRecognitizer
)检测初始点击。问题在于uigesturecognizer
贪婪,并阻止UIButton
接收触摸
在初始检测后,您需要进行一些转换以禁用手势识别器,然后在播放被点击后重新启用它
有财产吗
@property(nonatomic, getter=isEnabled) BOOL enabled
或者,您可以选择实现UIgestureRecognitizerDelegate
,并提供
gestureRecognizer:shouldReceiveTouch:
一个非常简单的尝试可能如下所示:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
{
return ![touch.view isKindOfClass:[UIButton class]];
}
不要忘记在手势识别器上设置代理
myGesture.delegate = self;
您的代码表明您正在使用
UIGestureRecognitizer
(很可能是UITapGestureRecognitizer
)检测初始点击。问题在于uigesturecognizer
贪婪,并阻止UIButton
接收触摸
在初始检测后,您需要进行一些转换以禁用手势识别器,然后在播放被点击后重新启用它
有财产吗
@property(nonatomic, getter=isEnabled) BOOL enabled
或者,您可以选择实现UIgestureRecognitizerDelegate
,并提供
gestureRecognizer:shouldReceiveTouch:
一个非常简单的尝试可能如下所示:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
{
return ![touch.view isKindOfClass:[UIButton class]];
}
不要忘记在手势识别器上设置代理
myGesture.delegate = self;
[按钮设置排他性触摸:是] [按钮设置排他性触摸:是]
imageTapped:
get Call?@Paul.s与实施samfishers建议一样,每次按下按钮时都会调用image tapped。您通常使用UIControlEventTouchUpInside
进行标准按钮交互。imageTapped:
get Call?@Paul.s与实施samfishers建议一样,是每次按下按钮时都会调用图像点击。您通常使用UIControlEventTouchUpInside
进行标准按钮交互…感谢您的响应,现在我的按钮位于图像上,并且我总是收到图像点击事件。抱歉,我没有领会其含义。。现在对你有用吗?谢谢你的回复,现在我的按钮在图像上,我总是被图像点击事件..对不起,我没有领会其含义。。现在对你有用吗?类似的事情也发生在我的HTML/CSS上。我通常做的是将边框设置为可能重叠的div,这样我就可以在屏幕上看到发生了什么。我可以做一些类似的事情,比如为UIImageView设置边框,以便在屏幕上看到它的确切位置吗?@London:可以,如果您将QuartzCore框架添加到项目中,并将#import放入.m文件中,您可以使用view.layer.borderColor=[UIColor redColor].CGColor;和view.layer.borderWidth=2.0;向任何视图添加2像素红色边框。不过,重叠问题实际上不是你的问题。Paul.s在上面的解释是真正的原因——你的手势识别器正在阻止你的按钮接收点击。Cocoa中的事件并不总是像JavaScript中的事件一样冒泡。@nick这还取决于视图是否剪辑到边界。这将影响边界绘制,但不会影响事件处理(无论剪辑如何,事件都不会在父帧之外工作)。HTML/CSS中也会发生类似的情况。我通常做的是将边框设置为可能重叠的div,这样我就可以在屏幕上看到发生了什么。我可以做一些类似的事情,比如为UIImageView设置边框,以便在屏幕上看到它的确切位置吗?@London:可以,如果您将QuartzCore框架添加到项目中,并将#import放入.m文件中,您可以使用view.layer.borderColor=[UIColor redColor].CGColor;和view.layer.borderWidth=2.0;向任何视图添加2像素红色边框。不过,重叠问题实际上不是你的问题。Paul.s在上面的解释是真正的原因——你的手势识别器正在阻止你的按钮接收点击。Cocoa中的事件并不总是像JavaScript中的事件一样冒泡。@这还取决于视图是否剪辑到边界。这会影响边界绘制,但不会影响事件处理(无论剪辑如何,事件都不会在父帧之外工作)。