2011-05-25 21 views
5

Continua aprendiendo sobre el Objetivo C y obteniendo la estructura correcta.Llamar a un método en un UIViewController desde un UIButton en una subvista

Tengo una aplicación iOS con un UIViewController que tiene un método definido llamado "doSomething". En mi vista controlador tengo una vista y en esa vista un número de UIButton que creo mediante programación (ver el ejemplo a continuación con un botón).

enter image description here

Ahora cuando se presiona el botón que desea llamar mi método "doSomething". La forma en que actualmente lo hago es la siguiente:

[myButton addTarget:nil 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside]; 

Ya que mi objetivo es nula que sube la cadena de respuesta hasta que encuentra un método llamado "doSomething". Funciona, pero realmente no se siente bien.

He empezado a estudiar el uso de @protocol pero no me he dado cuenta realmente. He estado viendo algunos tutoriales, pero para mí no es lo suficientemente claro. He usado protocolos como los controladores de vista de tabla, pero definir uno es nuevo para mí.

¿Sería posible obtener un ejemplo para este caso específico?

Gracias!

+0

¿Usas IB en absoluto? –

+0

¿Por qué esto no se siente bien? Es para lo que se formó la cadena de respuesta, y es exactamente lo que hay que hacer. – leftspin

Respuesta

4

Como pase de destino en el controlador de vista y se llamará al método sobre ese objeto.

Editar:

[myButton addTarget:controller 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside]; 

Asumiendo que tiene un controlador variable llamada que es su UIViewController. Si no tiene una referencia a su controlador, simplemente pase uno a su vista.

Edit2:

interfaz de Vista:

@property (assign) UIViewController* controller; 

Ver aplicación:

@synthesize controller; 

controlador:

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    someView.controller = self; 
} 
+0

¿Puede elaborar por favor? No estoy seguro de que te entiendo. – Structurer

+0

Gracias por editar skorulis. Ahora nos estamos acercando, pero creo que todavía no soy lo suficientemente bueno para hacer eso. Supongo que es muy natural para ti, pero no sé cómo hacer referencia a mi UIViewController, que supongo que es el núcleo aquí ... – Structurer

+0

¡Gracias por editar 2! Ahora estamos completos ;-) He probado y funciona como un reloj y he aprendido algo nuevo hoy. ¡Gracias! – Structurer

0

La forma en que lo haría se establece el valor de addTarget a self.

[myButton addTarget:self 
      action:@selector(doSomething:) 
    forControlEvents:UIControlEventTouchUpInside] 

Esto se verá para el método de doSomething en el objeto de que el objetivo se añade en. En este caso, este sería el controlador de vista.

+0

Gracias cs.Lo intenté antes y creo que irá a UIView, no a UIViewController. Si cambio a sí mismo, obtengo un "selector no reconocido enviado a instancia". Es por eso que lo cambié a nulo. – Structurer

+0

¿Puedes publicar tu código para tener una mejor idea de con qué estás teniendo problemas? – csano

+0

Hola cs, creo que skorulis está en el camino correcto, solo que aún no soy lo suficientemente inteligente como para saber el código real ... – Structurer

Cuestiones relacionadas