2015-08-04 3 views
0

Я получаю следующее сообщение об ошибке при касании на вид:«Непризнанный Селектор ошибок» при использовании Gesture распознавателя

2015-08-04 15:42:16.236 jake-and-bailey[12158:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainMenuViewController openSettingsPage]: unrecognized selector sent to instance 0x7af560f0' 

Я добавил следующий жест распознаватель с этой точки зрения:

Интерфейс:

#import <UIKit/UIKit.h> 

@interface OpenSettingsGestureRecognizer : UITapGestureRecognizer 

@property UIViewController* viewController; 

- (instancetype) initWithViewController: (UIViewController*) viewController; 

@end 

Внедрение:

#import "OpenSettingsGestureRecognizer.h" 
#import "SettingsViewController.h" 

@implementation OpenSettingsGestureRecognizer 

- (instancetype) initWithViewController: (UIViewController*) viewController { 
    self = [super initWithTarget:viewController 
          action:@selector(openSettingsPage)]; 
    if (self) { 
     _viewController = viewController; 
    } 
    return self; 
} 

- (void) openSettingsPage { 
    if (_viewController != nil) { 
     [_viewController presentViewController:[[SettingsViewController alloc] init] 
             animated:YES 
            completion:nil]; 
    } 
} 

@end 

По какой причине метод openSettingsPage вызывается из моего MainMenuViewController класса, а не OpenSettingsGestureRecognizer класса.

ответ

1

Вы инициализирующая цели в UITapGestureRecognizer «с с каким UIViewController вы используете для инициализации своего подкласса OpenSettingsGestureRecognizer. Попробуйте изменить:

self = [super initWithTarget:viewController 
         action:@selector(openSettingsPage)]; 

в

self = [super initWithTarget:self 
         action:@selector(openSettingsPage)]; 

, если вы хотите, чтобы цель быть OpenSettingsGestureRecognizer вместо MainMenuViewController (который я предполагаю, что этот UIViewController вы используете для инициализации жеста).

+0

Большое спасибо за ваш ответ! –

1

сменить цель на self и вы хорошо идти так:

self = [super initWithTarget:self 
          action:@selector(openSettingsPage)]; 

Читайте о целевых действиях шаблона проектирования here

+0

Большое спасибо за ваш ответ! –

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