¿Desea agregar el controlador gesto de pulsar larga a la UIView que tiene las UIButtons como subvistas? Si es así, algo parecido al enfoque de @Magic Bullet Dave es probablemente el camino a seguir.
Una alternativa es subclase UIButton y agregar a cada UIButton un longTapGestureRecogniser. A continuación, puede obtener su botón para hacer lo que quiera. Por ejemplo, podría enviar un mensaje que se identifique a un controlador de vista. El siguiente fragmento ilustra los métodos para la subclase.
- (void) setupLongPressForTarget: (id) target;
{
[self setTarget: target]; // property used to hold target (add @property and @synthesise as appropriate)
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:button action:@selector(longPress:)];
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void) longPress: (UIGestureRecognizer*) recogniser;
{
if (![recogniser isEnabled]) return; // code to prevent multiple long press messages
[recogniser setEnabled:NO];
[recogniser performSelector:@selector(setEnabled:) withObject: [NSNumber numberWithBool:YES] afterDelay:0.2];
NSLog(@"long press detected on button");
if ([[self target] respondsToSelector:@selector(longPressOnButton:)])
{
[[self target] longPressOnButton: self];
}
}
En el controlador de vista es posible que tenga código de algo como esto:
- (void) viewDidLoad;
{
// set up buttons (if not already done in Interface Builder)
[buttonA setupLongPressForTarget: self];
[buttonB setupLongPressForTarget: self];
// finish any other set up
}
- (void) longPressOnButton: (id) sender;
{
if (sender = [self buttonA])
{
// handle button A long press
}
if (sender = [self buttonB])
{
// handle button B long press
}
// etc.
}
si ([target auto [] respondsToSelector: @selector (longPressOnButton :)]) { [target auto [] longPressOnButton: self]; } this if-block no compila ... dio error como: no se conoce ningún método de instancia como ... – trillions
Lo descubrí ... agregué un protocolo y lo arreglé. Gracias.. – trillions