的touchesBegan和其他触摸事件没有得到UINavigationController的检测
-
27-09-2019 - |
题
在短,我想检测的导航控制器标题栏触摸,但有麻烦其实所有醒目的任何东西!
一切都没有做IB,如果有差别。
我的应用程序委托的.m文件包含:
MyViewController *viewController = [[MyViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:navigationController.view];
有加入此窗口在覆盖navigationController只剩下导航栏可见的方式与其他几个子视图。
MyViewController是的UIViewController的子类,其.m文件包含:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
NSLog(@"ended\n");
}
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches) {
NSLog(@"began\n");
}
}
我也试图把这些功能直接集成到应用程序委托的.m文件,但控制台保持空白。
我在做什么错了?
解决方案
那么,对于缺乏一个更好的主意,我添加了另一个子视图我的应用程序,明确的颜色,程序放置在导航栏标题,并使用了自定义类与覆盖相关的触摸方法这一观点。工作得很好,但我仍然希望有一种更好的解决方案。
其他提示
视图控制器被插入到响应者链其管理视图和上海华之间:
由于视图控制器被紧紧地结合到它们管理的观点,它们也可用于处理事件响应链的一部分。视图控制器本身的UIResponder类的后代和被插入到管理视图和它的父之间响应链。因此,如果由一个视图控制器管理的视图不处理事件时,它把事件到其视图控制器,它于是具有的处理事件或将其转发到该视图的上海华的选项。
(所述的UIViewController文档 )
是否有可能,您的控制器的管理视图是吃所有的事件?什么样的看法呢?
经本麻烦,如我的自定义视图在视图层次结构更深。相反,我爬上响应链,直到找到一个UIViewController
;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// Pass to top of chain
UIResponder *responder = self;
while (responder.nextResponder != nil){
responder = responder.nextResponder;
if ([responder isKindOfClass:[UIViewController class]]) {
// Got ViewController
break;
}
}
[responder touchesBegan:touches withEvent:event];
}
尝试添加方法userInteractionEnabled = YES到您的UIImageView
这些方法应该投入UIView子类不UIViewControllers ... UIView的将接收触摸回调,那么你可以对UIView的协议,并实现它的UIViewController中这样的UIViewController会收到一些回调当触摸事件发生...这里是一个链接,有关协议的谈判,以及如何定义它们并加以实施的协议参考