0

设置:我有两个视图需要响应触摸事件,它们相互叠加。视图 1 位于视图 2 之上。视图 2 是 UIWebView。视图 1 被子类化以捕获触摸事件。

我的问题是,如果我尝试从作为第一响应者的 View 1 的事件处理程序中调用 UIWebView 事件处理程序(touchesBegan: 和 touchesEnded:),则什么也不会发生。但是,如果我将 View 1 设置为 userInteractionEnabled = NO,则触摸会通过该视图并由第二个视图正确处理。

关于如何让 2 个视图响应触摸事件的任何想法?不幸的是,第二个视图是 UIWebView,所以我需要实际调用事件处理程序而不是不同的方法,等等......

提前感谢您的任何建议,乔尔

4

1 回答 1

1

这是我的问题的解决方案。它适用于各种 UIView !如果有人想在

catchUIEventTypeMotion default: ...

我希望这段代码对你有所帮助。

PJ.

自定义窗口.h

#import <Foundation/Foundation.h>

@interface CustomWindow : UIWindow {
}

- (void) sendEvent:(UIEvent *)event;

@end

自定义窗口.m

#import "CustomWindow.h"

@implementation CustomWindow

- (void) sendEvent:(UIEvent *)event
{       
    switch ([event type])
    {
        case UIEventTypeMotion:
            NSLog(@"UIEventTypeMotion");
            [self catchUIEventTypeMotion: event];
            break;

        case UIEventTypeTouches:
            NSLog(@"UIEventTypeTouches");
            [self catchUIEventTypeTouches: event];
            break;      

        default:
            break;
    }
    /*IMPORTANT*/[super sendEvent:(UIEvent *)event];/*IMPORTANT*/
}

- (void) catchUIEventTypeTouches: (UIEvent *)event
{
    for (UITouch *touch in [event allTouches])
    {
        switch ([touch phase])
        {
            case UITouchPhaseBegan:
                NSLog(@"UITouchPhaseBegan");
                break;

            case UITouchPhaseMoved:
                NSLog(@"UITouchPhaseMoved");
                break;

            case UITouchPhaseEnded:
                NSLog(@"UITouchPhaseEnded");
                break;

            case UITouchPhaseStationary:
                NSLog(@"UITouchPhaseStationary");
                break;

            case UITouchPhaseCancelled:
                NSLog(@"UITouchPhaseCancelled");
                break;

            default:
                NSLog(@"iPhone touched");
                break;
        }
    }
}

- (void) catchUIEventTypeMotion: (UIEvent *)event
{
    switch ([event subtype]) {
        case UIEventSubtypeMotionShake:
            NSLog(@"UIEventSubtypeMotionShake");
            break;

        default:
            NSLog(@"iPhone in movement");
            break;
    }
}

@end

AppDelegate.h

#import <UIKit/UIKit.h>
#import "CustomWindow.h"

@interface AppDelegate : NSObject <UIApplicationDelegate>
{
    CustomWindow *window;
}

@property (nonatomic, retain) IBOutlet CustomWindow *window;

@end
于 2010-05-31T17:58:07.067 回答