2015-10-12 22 views

risposta

9

Avviare l'override del preferredFocusedView nel vostro viewController con una proprietà personalizzata:

var myPreferredFocusedView:UIView? 
override var preferredFocusedView: UIView? { 
    return myPreferredFocusedView:UIView 
} 

Poi, nel vostro tasto di richiamata, impostare il myPreferredFocusedView per la vostra prossima pulsante preferito, che dovrebbe ottenere attenzione. Successivamente, richiedere direttamente un aggiornamento di messa a fuoco:

func buttonCallback(){ 
    myPreferredFocusedView = button2 // button2 is an example 

    /* 
     Trigger the focus system to re-query the view hierarchy for preferred 
     focused views. 
    */ 
    setNeedsFocusUpdate() 
    updateFocusIfNeeded() 
} 

Questo dovrebbe aggiornare il sistema di messa a fuoco al tuo altro pulsante.

+0

Grazie mille Antoine. Funziona benissimo, l'unico problema che ho ora è che quando si abbandona la vista e poi si torna indietro, l'attenzione è persa e ho bisogno di usare i tasti freccia (o trascinare sul telecomando) per ottenere un qualsiasi pulsante per mettere a fuoco. Proverò a studiare di più su questo ... – Cue

+0

Puoi usare lo stesso codice. Assicurati di aver impostato 'preferredFocusedView' e richiedi un aggiornamento di messa a fuoco sulla viewWillAppear – Antoine

+0

Grazie mille! – Cue

0

Un'altra opzione è quella di fare qualcosa di simile alla seguente, quando buttonA (per esempio) è attivo:

buttonB.setNeedsFocusUpdate() 
viewController.setNeedsFocusUpdate() 

Questo funziona solo se sono allo stesso livello nella gerarchia vista, però. Se no allora probabilmente avete bisogno di catena le chiamate verso setNeedsFocusUpdate tutta la strada fino alla gerarchia o qualcosa ...

Read more here