Pergunta

Eu tenho um UIView subclasse (CustomView para os fins desta questão), que tem a sua própria manipulação de todos os eventos touches (Começou, movido, terminou, Cancelado). Eu também tenho um UIButton que é um irmão de CustomView que se sobrepõe-lo.

Por exemplo, minha visão de hierarquia esta aparência:

  • UIView (visão de Controller)
    • CustomView com quadro (0, 0, 300, 300)
    • UIButton com quadro (0, 0, 100, 50)

Gostaria que o CustomView a eventos captura de toque, uma vez que o usuário tenha arrastado para fora do UIButton. Através de registo de depuração, parece que o evento UIControlEventTouchDragExit é o único a interceptação (embora não fogo até que o toque é de cerca de 100 pixels de distância do botão, mas isso não é importante para esta questão).

Idealmente, quando o evento de saída de arrastar é acionado, o botão seria parar de receber eventos de toque movimento, o CustomView iria receber um evento touchesBegan (mesmo se eu precisar de falsificar um para mim de alguma forma), e todos os eventos futuros toque (touchesMoved, etc ) seria enviado para o CustomView.

Eu tentei o seguinte e ele não tem qualquer efeito:

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

Eu acho que o objeto UITouch subjacente (que é consistente em todos os eventos de toque) não está sendo redirecionada para apontar para o CustomView. Como posso conseguir o efeito desejado?

Foi útil?

Solução

Basta usar hitTest: withEvent: descobrir o que ver "deveria" estar a receber o evento, em seguida, encaminhar o evento para a visualização apropriada. Você pode ter que fazer um pouco de dança ao redor para eventos interceptar antes de irem para o botão, mas isso é o que hitTest: withEvent:. Foi feito para

Outras dicas

você tem que canBecomeFirstResponder substituição para retornar SIM de outra forma becomeFirstResponder não faz nada. Isso já é feito em UIControls, mas não em UIViews

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top