Domanda

Ho una sottoclasse UIView ( CustomView ai fini di questa domanda) che ha la propria gestione di tutti gli eventi tocchi (Began, Spostato, Terminato, Annullato). Ho anche un UIButton che è un fratello di CustomView che si sovrappone.

Ad esempio, la gerarchia della mia vista è simile alla seguente:

  • UIView (vista del controller)
    • CustomView con cornice (0, 0, 300, 300)
    • UIButton con frame (0, 0, 100, 50)

Vorrei che CustomView acquisisse gli eventi touch una volta che l'utente si è trascinato fuori dal UIButton. Attraverso la registrazione di debug, sembra che l'evento UIControlEventTouchDragExit sia quello da intercettare (anche se non si attiva fino a quando il tocco si trova a circa 100 pixel dal pulsante, ma non è importante per questa domanda) .

Idealmente, quando viene attivato l'evento di uscita di trascinamento, il pulsante smetterebbe di ricevere eventi di spostamento del tocco, il CustomView otterrebbe un evento touchesBegan (anche se in qualche modo devo fingere uno da solo), e tutto i futuri eventi touch ( touchesMoved , ecc.) verrebbero inviati a CustomView.

Ho provato quanto segue e non ha alcun effetto:

-(void)btnTouchDragExit:(id)sender
{
    UIButton * btn = sender;
    [btn resignFirstResponder];
    [customView becomeFirstResponder];
}

Penso che l'oggetto UITouch sottostante (che è coerente tra gli eventi touch) non sia sottoposto a retargeting per puntare su CustomView. Come posso ottenere l'effetto desiderato?

È stato utile?

Soluzione

Usa solo hitTest: withEvent: per capire quale vista " dovrebbe " ricevere l'evento, quindi inoltrare l'evento alla vista appropriata. Potrebbe essere necessario ballare un po 'per intercettare gli eventi prima che finiscano nel pulsante, ma questo è ciò che hitTest: withEvent: è stato creato per.

Altri suggerimenti

devi sostituire canBecomeFirstResponder per restituire SÌ altrimenti diventareFirstResponder non fa nulla. Questo è già stato fatto su UIControl , ma non su UIView s

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top