在短,我想检测的导航控制器标题栏触摸,但有麻烦其实所有醒目的任何东西!

一切都没有做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会收到一些回调当触摸事件发生...这里是一个链接,有关协议的谈判,以及如何定义它们并加以实施的协议参考

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top