Наблюдение повышения мультисенсорные жесты в UITableView

Я надеюсь реализовывать повышение в / сверху UITableView, я посмотрел на несколько методов включая этого:

Подобный вопрос

Но в то время как я могу создать a UIViewTouch объект и наложение это на мой UITableView, события прокрутки не передаются к моему UITableView, я могу все еще выбрать ячейки, и они отвечают правильно путем инициирования перехода к новому объекту ViewController. Но я не могу прокрутить UITableView несмотря на передачу touchesBegan, touchesMoved, и touchesEnded событий.

19
задан Community 23 May 2017 в 12:02
поделиться

1 ответ

Похоже, это классическая проблема. В моем случае я хотел перехватить некоторые события через UIWebView, которые не могут быть отнесены к подклассам и т.д. и т.п.

Я обнаружил, что лучшим способом сделать это является перехват событий с помощью UIWindow:

EventInterceptWindow.h

@protocol EventInterceptWindowDelegate
- (BOOL)interceptEvent:(UIEvent *)event; // return YES if event handled
@end


@interface EventInterceptWindow : UIWindow {
    // It would appear that using the variable name 'delegate' in any UI Kit
    // subclass is a really bad idea because it can occlude the same name in a
    // superclass and silently break things like autorotation.
    id <EventInterceptWindowDelegate> eventInterceptDelegate;
}

@property(nonatomic, assign)
    id <EventInterceptWindowDelegate> eventInterceptDelegate;

@end

EventInterceptWindow.m:

#import "EventInterceptWindow.h"

@implementation EventInterceptWindow

@synthesize eventInterceptDelegate;

- (void)sendEvent:(UIEvent *)event {
    if ([eventInterceptDelegate interceptEvent:event] == NO)
        [super sendEvent:event];
}

@end

Создайте этот класс, измените класс вашего UIWindow.xib на EventInterceptWindow, затем где-нибудь установите eventInterceptDelegate на контроллер просмотра, который вы хотите перехватывать события. Пример, который перехватывает двойное нажатие:

- (BOOL)interceptEvent:(UIEvent *)event {
    NSSet *touches = [event allTouches];
    UITouch *oneTouch = [touches anyObject];
    UIView *touchView = [oneTouch view];
    //  NSLog(@"tap count = %d", [oneTouch tapCount]);
    // check for taps on the web view which really end up being dispatched to
    // a scroll view
    if (touchView && [touchView isDescendantOfView:webView]
            && touches && oneTouch.phase == UITouchPhaseBegan) {
        if ([oneTouch tapCount] == 2) {
            [self toggleScreenDecorations];
            return YES;
        }
    }   
    return NO;
}

Соответствующая информация здесь: http://iphoneincubator.com/blog/windows-views/360idev-iphone-developers-conference-presentation

41
ответ дан 30 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: