Подтвердить что ты не робот

Есть ли способ передать штрихи на iPhone?

У меня есть несколько UIButton, которые я использую для установки текущего действия при нажатии в основной области. Я также хотел бы позволить пользователю перетащить из кнопки непосредственно в основную область и предпринять те же действия; по существу, прикосновенияBegan и touchhesMoved должны быть переданы на основной экран при касании UIButtons, но также должны отправить действие нажатия кнопки.

Прямо сейчас у меня есть прикосновение к изменению элемента управления. Вывод перетаскивания вызывает касание внутренней части, чтобы установить элемент управления, а затем вызывает раздел касаний, чтобы начать операцию касания основной области.

Однако на данный момент штрихиMoved и touchesEnded, очевидно, не вызываются, потому что штрихи возникли из UIButton.

Есть ли способ частично игнорировать штрихи, чтобы они были переданы в основную область, но также разрешите мне сначала установить элемент управления?

4b9b3361

Ответ 1

В документации найдите Объекты ответчика и цепочку ответчиков

Вы можете "делиться" штрихами между объектами, пересылая прикосновение к цепочке ответчиков. У вашего UIButton есть ответчик/контроллер, который принимает события UITouch, я предполагаю, что после того, как он подготовил свою интерпретацию сообщения, которое он возвращает, касание было обработано и удалено.

Apple предлагает нечто подобное (в зависимости от типа прикосновения):

[self.nextResponder touchesBegan:touches withEvent:event];

Вместо того, чтобы удалять событие касания, оно передается.

Sub classed UIButton:

MyButton.h

#import <Foundation/Foundation.h>

@interface MyButton : UIButton {

}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ;

@end

MyButton.m

#import "MyButton.h"

@implementation MyButton

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    printf("MyButton touch Began\n");
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}
@end

Ответ 2

Я знаю, что этот вопрос - два года (и уже ответил), но тем не менее...

Когда я сам это пробовал, касания были перенаправлены, но кнопки больше не вели себя как кнопки. Я также передал прикосновения к "супер", и теперь все хорошо.

Итак, для новичков, которые могут наткнуться на это, вот как выглядит код:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}

Ответ 3

Нет необходимости в подклассе! Просто придерживайтесь этого в верхней части своей реализации прежде всего:

#pragma mark PassTouch

@interface UIButton (PassTouch)
@end

@implementation UIButton (PassTouch)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    [self.nextResponder touchesMoved:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];
    [self.nextResponder touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];
    [self.nextResponder touchesCancelled:touches withEvent:event];
}
@end