Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 捕获动态按钮点击ios_Objective C_Ios_Ios5 - Fatal编程技术网

Objective c 捕获动态按钮点击ios

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

我已经在UIImageView中以编程方式创建了按钮。此视图也是通过编程方式创建的。点击此视图中的图像时,按钮被创建,现在我想捕捉点击此按钮的时间,但我无法确定这是我的相关代码:

- (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中的事件一样冒泡。@这还取决于视图是否剪辑到边界。这会影响边界绘制,但不会影响事件处理(无论剪辑如何,事件都不会在父帧之外工作)。