iPhone - как отслеживать касания и разрешать одновременное нажатие кнопок? - PullRequest
1 голос
/ 17 апреля 2010

Мне интересно, как отследить прикосновения в любом месте экрана iPhone, и при этом кнопки UIB реагируют на нажатия.

Я создал подкласс UIView, сделал его полноэкранным и самым высоким в иерархии и переопределил его метод pointInside: withEvent. Если я верну ДА, я могу отследить касания в любом месте экрана, но кнопки не реагируют (вероятно, потому что представление инструктируется для обработки и прекращения касания). Если я возвращаю НЕТ, касание проходит через вид и кнопки реагируют, но я не могу отследить касания.

Нужно ли подкласс UIButton или это возможно через цепочку респондента? Что я делаю не так?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    return NO;
}   

//only works if pointInside:withEvent: returns YES.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        NSLog(@"began");    
        [self.nextResponder touchesBegan:touches withEvent:event];
}

//only works if pointInside:withEvent: returns YES.
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        NSLog(@"end");      
        [self.nextResponder touchesEnded:touches withEvent:event];
}

1 Ответ

1 голос
/ 17 апреля 2010

Вместо того, чтобы иметь дополнительный вид, вы можете создать подкласс главного окна ваших приложений и отслеживать касания (и другие события в нем)

@interface MyAppWindow : UIWindow
...
@implementation MyAppWindow

- (void)sendEvent:(UIEvent*)event {
    [super sendEvent:event];

    if (event.type == UIEventTypeTouches){
         // Do something here
    }
   return;  
}

Затем установите тип окна вашего приложения на MyAppWindow (я сделал это в MainWindow.xib в IB)

...