¿Cómo puedo saber en cual de las que el niño vistas a un suceso ocurrido cuando se utiliza UIGestureRecognizers?

De acuerdo a la documentación:

Un gesto de reconocimiento opera en
toca hit-probado para una vista específica
y todo eso de la vista subvistas.

Por lo que puedo ver, la «vista» de la propiedad es

Al ver el gesto de reconocimiento es
adjunto a.

que será el padre de la vista.

InformationsquelleAutor LK. | 2010-05-07

2 Comentarios

  1. 186

    Se encuentra el más profundo descendiente ver en la ubicación del evento. (Tenga en cuenta que si el niño tiene alguna interactivo privado interno nietos este código va a encontrar esos también.)

    UIView* view = gestureRecognizer.view;
    CGPoint loc = [gestureRecognizer locationInView:view];
    UIView* subview = [view hitTest:loc withEvent:nil];

    En Swift 2:

    let view = gestureRecognizer.view
    let loc = gestureRecognizer.locationInView(view)
    let subview = view?.hitTest(loc, withEvent: nil) //note: it is a `UIView?`

    En Swift 3:

    let view = gestureRecognizer.view
    let loc = gestureRecognizer.location(in: view)
    let subview = view?.hitTest(loc, with: nil) //note: it is a `UIView?`
    • Excelente ! Gracias por lo mucho que realmente me ayudó !
    • Impresionante! Esto le ayudará con mucho más de este caso 🙂
    • Sólo quería añadir que hitTest:withEvent: va a ir tan lejos abajo en el árbol de los niños, ya que puede. Si hay cualquier subvistas, o subvistas de subvistas, que desea ignorar, puede establecer userInteractionEnabled = NO en esos puntos de vista.
    • ¿Y si queremos ir sólo en un nivel más abajo?
    • Encontrar .superview de forma iterativa hasta alcanzar el original view.
  2. -1

    Para los futuros usuarios…
    Tengo una mejor opción ahora, cuando el mundo no está utilizando obj-c más…

    [sender view]

    usarlo de esta manera:

    UITapGestureRecognizer * objTapGesture = [self createTapGestureOnView:myTextField];
    
    [objTapGesture addTarget:self action:@selector(displayPickerView:)];

    //agregar estos métodos

    -(void)displayPickerView:(UITapGestureRecognizer*)sender
    {
        UITextField *textField = (UITextField*)[sender view];
        NSLog(@"tag=  %ld", (long)textField.tag);
    }
    
    -(UITapGestureRecognizer*)createTapGestureOnView:(UIView *)view
    {
        view.userInteractionEnabled = YES;
        UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]init];
        tapGesture.numberOfTapsRequired = 1;
        tapGesture.numberOfTouchesRequired = 1;
        [view addGestureRecognizer:tapGesture];
        return tapGesture;
    }
    • -[UIGestureRecognizer ver] devuelve una vista que se adjunta (por especificación); OP está interesado en la subvista de ese punto de vista.

Dejar respuesta

Please enter your comment!
Please enter your name here