2011-03-03 18 views
12

Estoy usando UIImageView con UIButtons un montón. Entonces, creé una clase personalizada para casarme permanentemente con estos dos y hacer las cosas un poco más simples. Todo funciona bien hasta que decidí implementar - (id) initWithObject: (AUIImageViewButton *) imageViewButton.¿Cómo obtener los eventos UIButton Target, Action y Control?

Claramente necesito copiar todas las propiedades relevantes del objeto imageViewButton que se está pasando. UIImageView no es problemático en absoluto. Algo como esto se ocupa de ella:

imageview = [[UIImageView alloc] initWithFrame:imageViewButton.imageview.frame];  // Copy all relevant data from the source's imageview 
[imagebutton.imageview setBackgroundColor:imageViewButton.imageview.backgroundColor]; // 
[imagebutton.imageview setImage:imageViewButton.imageview.image];      // 

mayoría de las cosas botón también es fácilmente disponible:

button = [UIButton buttonWithType:imageViewButton.button.buttonType];     // Copy all relevant data from the source's button 
button.frame = imageViewButton.imageview.frame;           // 
[button setTitle:imageViewButton.button.titleLabel.text forState:UIControlStateNormal]; // 
button.tag = imageViewButton.button.tag;            // 

estoy teniendo un poco de problemas para encontrar la manera de obtener todos los datos para el addTarget: acción : método forControlEvents.

Al mirar los documentos, veo que podría usar los métodos allControlEvents y allTargets de UIControl. Voy a profundizar en eso en este momento y ver cuántos problemas puedo meterme. De lo que no estoy seguro es de la acción.

¿Alguien puede darme un empujón en la dirección correcta?

Gracias,

-Martin

+0

sólo la comprobación, ¿sabes que UIButton admite tanto una imagen de fondo (donde el texto del título se muestra en la parte superior) como una imagen (donde no aparece el texto del título)? ¿Qué características de UIImageView necesitas? – Bogatyr

Respuesta

31

de allTargets y allControlEvents son la manera de empezar uicontrol. La pieza final del rompecabezas es actionsForTarget:forControlEvent:, llámala una vez para cada objetivo y evento.

+0

¡Ah! ¡Estaba justo allí! ¡Justo en frente de mí! Gracias por mencionarlo. –

19

Mostrando cómo iterar sobre los objetivos de un botón y crear copias del selector en otro botón. Un ejemplo específico es solo el evento touchupinside, pero eso es todo lo que uso.

for (id target in button.allTargets) { 
    NSArray *actions = [button actionsForTarget:target 
             forControlEvent:UIControlEventTouchUpInside]; 
    for (NSString *action in actions) { 
      [newButton addTarget:target action:NSSelectorFromString(action) forControlEvents:UIControlEventTouchUpInside]; 
    } 
} 
0

He utilizado este para eliminar cualquier posible objetivo/acción no deseada antes de asignar una nueva:

if let action = button.actions(forTarget: target, forControlEvent: .touchUpInside)?.first 
{ 
    button.removeTarget(target, action: NSSelectorFromString(action), for: .touchUpInside) 
} 

o si realmente desea eliminar todas las acciones:

if let actions = button.actions(forTarget: target, forControlEvent: .touchUpInside) 
{ 
    for action in actions 
    { 
     button.removeTarget(target, action: NSSelectorFromString(action), for: .touchUpInside) 
    } 
} 
Cuestiones relacionadas