Obteniendo la acción de UIGestureRecognizer en iOS
objective-c uitableview (3)
Imprimí un gesto de UITableviewCell en el método - tableView: didSelectRowAtIndexPath en NSLog como
<UIScrollViewPanGestureRecognizer: 0x11e92080; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO; view = <UITableViewCellScrollView 0x11e94bf0>; target= <(action=handlePan:, target=<UITableViewCellScrollView 0x11e94bf0>)>>
y he asignado este UIScrollViewPanGestureRecognizer a un UIGestureRecognizer para acceder a las propiedades del mismo de la siguiente manera:
UIGestureRecognizer *myGes=[temp.gestureRecognizers objectAtIndex:1];
Puedo acceder a todas las propiedades de ''myGes'' como
myGes.state;
myGes.cancelsTouchesInView;
myGes.delaysTouchesEnded;
myGes.view;
Excepto una propiedad nombrada como objetivo .
¿Hay alguna posibilidad de acceder a esa propiedad? porque necesito realizar esa acción.
Cualquier comentario o sugerencia sería apreciada.
Gracias de antemano.
Hay una manera de obtener acceso al target
la propiedad, pero no estoy seguro de que este método pase el proceso de aprobación de Apple.
NSMutableArray *targets = [myGes valueForKeyPath:@"_targets"];
id targetContainer = targets[0];//get first target for example
id targetOfMyGes = [targetContainer valueForKeyPath:@"_target"];
NSLog(@"%@", targetOfMyGes );//you can see reference for target object
Gracias Neilco : su respuesta ayuda a crear una solución.
Nota: la clase exacta del objeto targetOfMyGes
necesita definirse a usted mismo. Por defecto id
- adecuado para cualquier clase de objeto.
Tengo una solución diferente a esto que me ha funcionado. Esto es más un cambio de diseño ... no se puede acceder al objetivo desde el gesto capturado. Por lo tanto, mantén una referencia al objeto cuando ocurrió el aterrizaje y antes de que comenzara la bandeja.
@property (nonatomic, strong) UIButton *myTouchedButton; // reference to button
(void)init
{
...
[card.button addTarget:self action:@selector(cardTouchDownInside:) forControlEvents:UIControlEventTouchDown];
...
}
-(void)cardTouchDownInside:(id)sender
{
NSLog(@"touch down on object");
self.myTouchedButton = (UIButton*)sender;
}
UIGestureRecognizer
mantiene internamente una matriz de objetivos . No hay acceso público a esta matriz.