Как обнаружить прикосновение к UIView при прикосновении к UIButton? - PullRequest
1 голос
/ 27 июня 2011

Я использую (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event и (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event для обработки некоторых перетаскиваний на UIView. Однако у этого UIView есть некоторые UIB-кнопки в качестве подпредставлений UIView, и когда пользователь касается UIButton (которые также превышают UIView), методы прикосновений не вызываются.

Мне нужно, чтобы сенсорные методы в UIView вызывались всегда, и все еще работают кнопки UIB, как мне этого добиться?

1 Ответ

4 голосов
/ 28 июня 2011

ОК, нет проблем, я уже решил свой вопрос.

Способ состоит в том, чтобы переопределить сенсорные методы в кнопках, например, так:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    touchMoved = NO;
    [[self superview] touchesBegan:touches withEvent:event];
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    touchMoved = YES;
    [[self superview] touchesMoved:touches withEvent:event];
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!touchMoved) [super touchesEnded:touches withEvent:event];
}

Переменная touchMovedпредназначенный для отслеживания, было ли это прямое касание кнопки или касание, чтобы перетащить суперпредставление.Поскольку я использую UIControlEventTouchUpInside, то он работает нормально, если я отключаю прикосновения закругленными, когда он отслеживает движение касания.

...