我在导航栏上的appdelegate文件中显示UILabel(不完全在导航栏上)。它显示完美。但没有触摸事件正在呼吁它。 Touch仅在状态栏上有效。请帮忙。提前谢谢。
这是我的代码。
CGRect frame=[[UIApplication sharedApplication] statusBarFrame];
backgroundImageView=[[UILabel alloc] initWithFrame:CGRectMake(0, frame.size.height, 320, 44)];
backgroundImageView.tag=50;
[backgroundImageView setTextAlignment:UITextAlignmentCenter];
[backgroundImageView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"music.png"]]];
[self.window addSubview:backgroundImageView];
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"in touched");
}
答案 0 :(得分:0)
正如泰勒在his answer here中所述:
UIWindow中有一个方便的catch-all方法叫做sendEvent:which 看到事件处理管道开始附近的每个事件。如果你 想做任何非标准的额外事件处理,这是一个很好的 放置它。
要拦截所有触摸,您应该使用UIView子类作为控制器视图,并覆盖其中的hitTest:withEvent:方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
touchedView = [super hitTest:point withEvent:event];
NSSet* touches = [event allTouches];
// handle touches if you need
return touchedView;
}
或强>
2)您可以使用:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(anyMethod)];
[imageView addGestureRecognizer:tgr];
[tgr release];
Before doing this, enable user interaction of UIimageView.