我目前正在努力使 touchesBegan 起作用。
我目前有这个设置
[UIView(UIViewController) -> UIScrollView -> UIView[holderView] -> UILabels[]]
我以这种方式以编程方式添加我的 UILabels
//UIViewController method
UILabel *etiquetaCantidad = [[UILabel alloc] initWithFrame:CGRectMake(350, idx * 35, 50, 30)];
[etiquetaCantidad setTextAlignment:NSTextAlignmentCenter];
[etiquetaCantidad setBackgroundColor:[UIColor azulBase]];
[etiquetaCantidad setTextColor:[UIColor whiteColor]];
[etiquetaCantidad.layer setCornerRadius:5];
[etiquetaCantidad setText:@"0"];
[etiquetaCantidad setUserInteractionEnabled:YES];
[etiquetaCantidad setTag:idx + 100];
[holderView addSubview:etiquetaCantidad];
但是当我尝试
// UIViewController
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"Touch realizado: %@", touches);
}
它没有被触发,我在这里错过了什么???
最佳答案
好吧,在解决了我的问题之后,问题是由 UIScrollView
引起的介于我的UILabel
之间我和我的 UIViewController
所以我为 UIScrollView
实现了一个类别将触摸传递给它的 super 或 nextResponder
#import "UIScrollView+TouchesBeganPropagable.h"
@implementation UIScrollView (TouchesBeganPropagable)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if(!self.dragging){
[self.nextResponder touchesBegan:touches withEvent:event];
}else{
[super touchesBegan:touches withEvent:event];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
if (!self.dragging){
[self.nextResponder touchesMoved: touches withEvent:event];
}
else{
[super touchesMoved: touches withEvent: event];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
if (!self.dragging){
[self.nextResponder touchesEnded: touches withEvent:event];
}
else{
[super touchesEnded: touches withEvent: event];
}
}
@end
这样,我就可以在我的 UIViewController
上使用 touchesXXXX 方法了。与任何 UIView
互动不管是不是 UIScrollView
在中间
关于ios - UILabel 不触发 touchesBegan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868393/