Есть ли способ передать штрихи на iPhone?
У меня есть несколько UIButton
, которые я использую для установки текущего действия при нажатии в основной области. Я также хотел бы позволить пользователю перетащить из кнопки непосредственно в основную область и предпринять те же действия; по существу, прикосновенияBegan и touchhesMoved должны быть переданы на основной экран при касании UIButtons, но также должны отправить действие нажатия кнопки.
Прямо сейчас у меня есть прикосновение к изменению элемента управления. Вывод перетаскивания вызывает касание внутренней части, чтобы установить элемент управления, а затем вызывает раздел касаний, чтобы начать операцию касания основной области.
Однако на данный момент штрихиMoved и touchesEnded, очевидно, не вызываются, потому что штрихи возникли из UIButton.
Есть ли способ частично игнорировать штрихи, чтобы они были переданы в основную область, но также разрешите мне сначала установить элемент управления?
Ответы
Ответ 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