2009-09-03 16 views
6

He escrito una subclase de UIControl que rastrea una serie de gestos que me interesan. En la documentación para la enumeración de UIControlEvents, dice que hay un rango de números de evento llamado UIControlEventApplicationReserved que está "disponible para el uso de la aplicación". ¿Esto significa que soy libre de usar este rango de números para mis propios eventos personalizados?¿Se pueden realizar eventos personalizados con UIControlEventApplicationReserved?

Si es así, ¿alguien puede decirme cómo activar eventos? La forma más obvia que se me ocurre es:

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]; 
    } 
} 

¿Eso funcionaría?

+0

Bien, sé que esta es una vieja pregunta, pero ¿hiciste algún progreso en esto? –

Respuesta

20

De acuerdo, este es un tema antiguo, pero voy a agregar mi respuesta a esto. Realmente no puedo decir con certeza si puede usar esta máscara para su propia aplicación aunque lo sospeche.

Pero puedo decirle con seguridad cómo usarlo. Como entrante este valor máscaras de los bits en la posición 24, 25, 26 y 27. Usted debe escribir una enumeración de su propia que utiliza estos pedacitos solamente, por ejemplo:

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

Una vez hecho esto puede registrarse para estos acciones:

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

Cada vez que se activa la acción MyPrimaryActionEvent, sí recibirá el mensaje de algunaAccion :. Ahora, cómo activar esa acción depende del botón. En su propia subclase uicontrol puede desencadenar el cambio de la siguiente manera:

[self sendActionsForControlEvents:MyPrimaryActionEvent]; 

Esto enviará todas las acciones a todos los objetivos registrados para el evento MyPrimaryActionEvent. Y tu estas listo.

Cuestiones relacionadas