2012-04-18 9 views
20

Tengo una clase de controlador de vista base que hereda de UIViewController y una clase heredada de la clase base viewcontroller. Ahora tengo una semilla cuyo propietario del archivo es la clase heredada, pero todas mis acciones y puntos de venta están en la clase base. ¿Es posible conectar la acción \ salida en el archivo de punta a la de la clase base?cómo conectarse a IBOutlet o IBAction en la clase base

+0

Sí. ¿Están todos tus archivos en el mismo proyecto en Xcode? – wbyoung

Respuesta

29

Voy a ser básicamente explico por example:

definir una clase base (llamémoslo BaseViewController) y asignarle un UITableView IBOutlet en el archivo .h:

// BaseViewController.h 
@interface BaseViewController : UIViewController  
@property (weak, nonatomic) IBOutlet UITableView *tableView;  
@end 

definir dos hijos clases (es decir FirstChildViewController y SecondChildViewController):

// FirstChildViewController.h 
@interface FirstChildViewController : BaseViewController 
@end 

// SecondChildViewController.h 
@interface SecondChildViewController : BaseViewController 
@end 

ahora para hacer uno (o ambos) de la childre n las clases usan el iboutlet de la clase base, simplemente arrastre el punto de referencia a la definición de propiedad en el archivo .h de la clase base ... ¡y listo!

enter image description here

here es un proyecto completo que ilustra esto.

+3

hmm ... esto no parece funcionar para swift –

7

dos maneras de lograr esto:

1)

lo hacen mediante programación (es decir, en el código)

Primera declarar sus puntos de venta en la clase base.

y luego asigne sus puntos de venta a través de código en su clase heredada.

y

2)

También puede asignar sus puntos de venta y acciones en su archivo XI ter. Xcode sabe acerca de salidas y acciones heredadas de clases base.

4

Si la clase base está en un marco Swift, a veces Xcode 7 no verá las salidas, incluso si la clase base y sus salidas son públicas. En este caso la solución es la siguiente:

  1. En IB ajuste el control para usar la clase base
  2. Conectar las salidas
  3. En IB establecer el control para usar la clase derivada

IB mostrará "!" junto a las salidas como si faltaran, pero no habrá errores en el tiempo de ejecución.

Si alguien tiene una mejor solución, ¡házmelo saber!

+0

¿Puede explicarme un poco más detalladamente cómo hacer esto? – c0d3Junk13

+0

@ c0d3Junk13: abrir Storyboard. Mostrar inspector de identidad. Seleccionar control Establece su clase a la clase base. Conectar tomacorrientes.Seleccione el mismo control y establezca la clase a la clase derivada. Ignora las advertencias. – phatmann

+0

hmm .. esto parece hackish .. ¿está permitido? o es algo que se romperá más tarde en –

Cuestiones relacionadas