2013-07-17 3 views
1

У меня есть UIButton, который реагирует только на мои жесты касания, когда я нажимаю на очень маленькую подзону внутри него. Я assuming, что, возможно, другой взгляд проглатывает мои жесты, когда я нажимаю в других местах внутри кнопки.Как узнать представление, которое принимает текущий жест

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

обновление: ответ Ахмеда ниже работал отлично .. Я также добавил к нему UIView-х recursiveDescription найти вид обижая быстро.

т.е. если я поставил точку останова на линии NSLog:

- (void)sendEvent:(UIEvent *)event 
{ 
    [super sendEvent:event]; 
    UIView *touchReceipientView =((UITouch *)[event.allTouches anyObject]).view; 
    NSLog(@"View = %@ ",touchReceipientView); 
} 

я получаю этот выход (в качестве примера):

(lldb) po [touchReceipientView recursiveDescription] 
<UIView: 0x1fd16470; frame = (0 430; 320 40); layer = <CALayer: 0x1fd164d0>> 
    | <UIButton: 0x1fd13030; frame = (297 0; 18 19); opaque = NO; tag = 11; layer = <CALayer: 0x1fd130f0>> 
    | | <UIImageView: 0x1fd13190; frame = (-41 -40.5; 100 100); alpha = 0; opaque = NO; userInteractionEnabled = NO; tag = 1886548836; layer = <CALayer: 0x1fd131f0>> 
    | | <UIImageView: 0x1fd14d00; frame = (1 2; 16 15); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1fdc8e50>> 

, который заставил меня идентифицировать нарушителя UIView немедленно!

+0

Loop через представление, начиная с ключом окна вашего приложения, и отправить 'isFirstResponder' им. –

+0

gestureRecognizer.view – Desdenova

+0

@Desdenova Если бы у меня уже был объект gestureRecognizer, я думаю, что этот вопрос будет тривиальным, не так ли? – abbood

ответ

2

Вы можете подклассифицировать UIApplication и посмотреть, кто принимает события.

и main.m,

@interface MyApplication : UIApplication 

@end 


@implementation MyApplication 

- (void)sendEvent:(UIEvent *)event 
{ 
    [super sendEvent:event]; 
    NSLog(@"View = %@", ((UITouch *)[event.allTouches anyObject]).view); 
} 

@end 





int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([MyAppDelegate class])); 
    } 
} 
+0

Я предполагаю, что вы имели в виду '@implementation MyApplication'? – abbood

+0

wow работал как шарм! – abbood

+0

Да, я использую MyApplication. Я отредактирую его. –

Смежные вопросы