Use notificações para compartilhar eventos de gestos

Essa é uma boa maneira de separar seu aplicativo.

Digamos que você queira responder em dois lugares diferentes a um evento de torneira. Um bom exemplo disso é quando você deseja ter algumas análises sobre eventos de torneira.

Todos concordaremos que colocar tudo dentro do manipulador de ação é uma ideia muito ruim. Talvez o purista do Cacau diga que delegar será a melhor opção, o que pode ser verdade. Mas acho que Notificações é outra boa opção e muito poderosa se usado corretamente.

Então, se você fizer algo como:

UITapGestureRecognizer *tap = [UITapGestureRecognizer.alloc initWithTarget:self action:@selector(singleTapAction:)];
tap
.numberOfTapsRequired = 1;
tap
.delegate = self;

Em seguida, você terá na ação uma postagem de notificação:

[NSNotificationCenter. defaultCenter postNotification:@"singleTap" object:aDataObject];

Dessa forma, você pode adicionar observadores sempre que precisar:

myObserver = [NSNotificationCenter.defaultCenter addObserverForName:@"singleTap" object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification *notification){
// Actions here
}];

Não se esqueça de remover seu observador no desalocador correspondente:

- (void)dealloc
{
[NSNotificationCenter.defaultCenter removeObserver:myObserver];
}