2009-09-03 18 views
6

Ho scritto una sottoclasse di UIControl che traccia un numero di gesti che mi interessano. Nella documentazione per l'enumerazione di UIControlEvents, viene indicato che esiste un intervallo di numeri di evento denominato UIControlEventApplicationReserved che è "disponibile per l'utilizzo dell'applicazione". Questo significa che sono libero di usare questa gamma di numeri per i miei eventi personalizzati?È possibile creare eventi personalizzati con UIControlEventApplicationReserved?

In tal caso, qualcuno può dirmi come attivare gli eventi? Il modo più ovvio che posso pensare di fare è questo:

enum { 
    ... 
    MyCustomEvent = 65, 
    ... 
}; 

... 

UIEvent* customEvent; 

... 

for (id target in [self allTargets]) 
{ 
    for (NSString* action in [self actionsForTarget:target forControlEvent:MyCustomEvent]) 
    { 
      [self sendAction:NSSelectorFromString(action) to:target forEvent:customEvent]; 
    } 
} 

Potrebbe funzionare?

+0

OK, so che questa è una vecchia domanda, ma avete fatto qualche progresso in merito? –

risposta

20

Ok, questo è un vecchio argomento ma aggiungerò la mia risposta a questo. Non posso davvero dire con certezza se puoi usare questa maschera per la tua applicazione anche se lo sospetto.

Ma posso dirti di sicuro come usarlo. Per antipasto questo valore maschere i bit in posizione 24, 25, 26 e 27. Si dovrebbe scrivere un enum del vostro proprio che utilizza questi bit soltanto, ad esempio:

enum { 
    MyPrimaryActionEvent = 1 << 24, 
    MySecondaryActionEvent = 1 << 25, 
}; 

Una volta fatto ciò è possibile registrarsi per queste azioni:

[myButton addTarget:self action:@selector(someAction:) forControlEvents: MyPrimaryActionEvent]; 

Ogni volta che il MyPrimaryActionEvent azione viene attivata, l'auto riceverà il messaggio someAction :. Ora come attivare questa azione dipende dal pulsante stesso. Nel vostro UIControl sottoclasse è possibile attivare la modifica come segue:

[self sendActionsForControlEvents:MyPrimaryActionEvent]; 

Questo invierà tutte le azioni di tutti gli obiettivi registrati per l'evento MyPrimaryActionEvent. E hai finito.

Problemi correlati