2011-05-20 17 views
28

hemos comenzado un proyecto universal bajo el nuevo Xcode4. Mi aplicación funciona en ambos dispositivos de iPad iPhone & pero no está bien diseñado para el iPad. Tengo 2 archivos .xib para MainWindow: MainWindow.xib (dispositivo iPhone) & MainWindow-Ipad.xib (dispositivo iPad). Pero solo un archivo .xib para mi MainView: MainView.xib.Cómo vincular un archivo .xib a un archivo de clase con Xcode 4

así que estoy tratando de crear un archivo .xib específico para el dispositivo iPad:

Nueva archivo> Interfaz de usuario> Ver -> siguiente -> familia de dispositivos: iPad -> MainView-iPad.xib -> guardar

Y, por supuesto, no hay nada conectado, ningún medio de referencia, ningún vínculo con ninguna clase.

puedo comprobar cada miniatura de mi nuevo MainView-iPad.xib con el fin de vincularlo a mi clase MainViewController sin éxito!?

dónde o cómo puedo acceder a mi clase MainViewController? Gracias de antemano.

Respuesta

3

desea crear una nueva subclase UIViewController, no un nuevo archivo de interfaz de usuario. Eso creará su .xib así como los archivos de clase (.m y .h). La plantilla está en Cocoa Touch.

Querer un enlace a un controlador de vista existente probablemente no sea una buena idea. Si sigue el patrón de diseño MVC (Modelo-Vista-Controlador), tiene sus clases de datos y controladores de vista separados. Si puede, saque las cosas de su clase MainViewController a una clase de datos de su propiedad. Luego, cree otro controlador de vista para iPad y conviértalo en propietario de una instancia de su clase de datos que creó.

+0

Gracias por Su respuesta. Por supuesto, estoy tratando de seguir el Modelo MVC, pero para mí (y tal vez estoy totalmente equivocado) los archivos .xib representan las "Vistas" del modelo MVC. No veo nada malo tener 1 controlador con 2 vistas. ¿Y si tengo que crear 1 controlador para cada Vista, cada vez que hice un cambio en uno de mis controladores tengo que duplicarlo en el otro controlador? En todos los casos, para enlazar un .xib a una clase bajo Xcode4: * Abra su .xib * En el marcador de posición: seleccione del propietario del archivo * En la tercera miniatura: "Identidad Inspector" del panel derecho \t -custom Sección de clase: elija el archivo de clase – user763308

+0

Estoy bastante seguro de que normalmente crea una .xib por subclase UIViewController. Aquí están los documentos de manzana en la que: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101-SW35 –

1

No es necesariamente incorrecto para tener una relación de 2: 1 de .xib al controlador de clase en el caso de una aplicación universal. Aquí está el patrón seguir:

usted tiene su clase MainViewController. Tienes 2 archivos .xib: MainView-iPhone.xib y MainView-iPad.xib. Ambos archivos tienen su salida "Propietario del archivo" establecida en MainViewController. Ahora, para asegurar el controlador de vista carga actualmente la interfaz correcta y conecta todos los puntos de venta adecuados dependiendo del dispositivo en el que se ejecuta la aplicación, voy a hacer algo como lo siguiente:

MainViewController* controller = nil; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    controller = [[MainViewController alloc]initWithNibName:@"MainView-iPad" bundle:[NSBundle mainBundle]]; 
} else { 
    controller = [[MainViewController alloc] initWithNibName:@"MainView-iPhone" bundle:[NSBundle mainBundle]]; 
} 
/* Present the controller */ 

Ahora, también debe Diga que esto es solo una buena idea si no hay demasiadas rutas de código distintas que deban seguirse cuando se ejecuten en dispositivos diferentes. Si el comportamiento del controlador es más especializado cuando se ejecuta en un iPad frente a un iPhone, es una mejor idea abstraer el comportamiento común en MainViewController y luego escribir dos subclases: MainViewController_iPhone y MainViewController_iPad. Cada subclase carga el archivo .xib apropiado y maneja todos los detalles internamente. En este caso, el código anterior se vería más como:

MainViewController* controller = nil; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    controller = [[MainViewController_iPad alloc] init]; 
} else { 
    controller = [[MainViewController_iPhone alloc] init]; 
} 
/* Present the controller */ 
90

La respuesta correcta fue dada por user763308:

para vincular un .xib a una clase bajo Xcode4:

  1. Abra su .xib.
  2. En marcador de posición: seleccione Propietario del archivo.
  3. En la tercera miniatura: "Inspector de identidad" del panel derecho, edite el campo "Clase personalizada" e ingrese el nombre de su clase.

También tuvo entonces que:

  1. Haga clic en la vista raíz en Objetos.
  2. Haga clic en la última pestaña: "Mostrar conexiones".
  3. Arrastre "Nuevo punto de referencia" al "Propietario del archivo" y seleccione "ver".
+3

Esto parece EXACTAMENTE lo que tendrías que hacer, y ya me había funcionado en el pasado, pero no entiendo qué hacer cuando ocasionalmente esto NO funciona cuando intento insertar un .xib de forma retroactiva en un proyecto y el La clase .h/.m todavía no está conectada al .xib – RanLearns

+0

No se corregirá automáticamente a la clase que necesito agregar en el paso 3. Intenté limpiar la compilación. –

1

para vincular el .xib al archivo de clase u puede hacer los siguientes pasos: -

1) Ir a la vista lateral derecha. 2) haz clic en el tercer botón y en el que tienes una fila preguntando sobre la clase personalizada, solo tienes que escribir el nombre del archivo de clase que deseas que se vincule.

para la creación de los puntos de venta que hacen referencia a: -

1) u puede copiar todos los puntos de venta del iPhone .xib y pegarlo aquí y arrastre todos los puntos de venta para el propietario del archivo y luego conectarlos.

Cuestiones relacionadas