2008-10-26 11 views

Respuesta

28
  1. En Interface Builder, cree un nuevo xib con la plantilla Ver.
    • Haga clic en la vista en la lista de objetos en el xib (también debe ver "de propietario del archivo y 'Primera respondedor').
    • empuje Cmd-4 para abrir el panel Identidad de la inspector.
    • Escriba el nombre de su clase en el campo "nombre de clase" y empuje de retorno.

usted debería ser capaz d trapear botones en. Para obtener la punta del código, use -[NSBundle loadNibNamed:owner:options:]. Su vista debe ser el primer objeto en la matriz devuelta.

+0

Estoy tratando de hacer lo mismo: ¿sabe qué nombre de clase debería usar para (a) el UIControllerView padre y (b) la UIView personalizada aquí? He notado en mi código que tengo mi nombre de clase UIView personalizado en ambos, pero eso me da una llamada recursiva a mi método de inicio de UIView personalizado. Es decir, tengo (a) en el UIControllerView padre que utiliza mi vista personalizada, en IB para su XIB, uso un UIView que he establecido el nombre de clase en "clockview", pero luego (b) en mi Uviewiew personalizado de reloj real (no UIControllerView) Archivo XIB He hecho lo mismo y configuré el nombre de la clase para que sea "clockview". – Greg

+0

@Colin ¿De verdad necesitamos configurar el 'Propietario del archivo' en la clase UIView personalizada? No veo ninguna diferencia estableciéndolo en 'UIView' o' myCustomView'. ¿Cuál es el propósito del 'Dueño del archivo' en este caso? – pixelfreak

+0

Quiero poder usar una UIView con una punta en varios lugares. ¿Hay alguna manera de hacerlo sin tener que conectar los IBOutlet todo el tiempo? – jowie

3

En mi caso, no quería que mi controlador de vista tuviera ningún conocimiento de IBOutlets de .xib de mi vista. Quería que mi subclase view fuera propietaria de IBOutlets. Lamentablemente, UIView no tiene un método initWithNibName:, así que acabo de crear mi propia categoría.

Aquí es lo que hice:

  • En IB, haga clic en su UIView principal, y en el inspector de identidad, establezca la clase a su subclase
  • En IB, haga clic sobre el archivo propietario, y en el Identity Inspector, configure la clase en su subclase
  • Use su nuevo método de categoría initWithNibName: para crear una instancia de su vista.

Y aquí es la categoría que creé:

- (instancetype)initWithNibName:(NSString *)nibName 
{ 
    NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
    if (arrayOfViews.count < 1) { 
     return nil; 
    } 

    self = arrayOfViews[0]; 

    return self; 
} 

Inspirado por this post.

Sin embargo, tenga en cuenta que hasta ahora el marco se ajustará automáticamente, por lo que a diferencia del código en la publicación, aún no he tenido que establecer explícitamente el marco. Además, a diferencia del código de la publicación, necesitaba establecer owner:self para que IBOutlets se conectara correctamente.

Cuestiones relacionadas