2011-08-03 10 views
6

He preguntado cómo puedo hacer que una vista personalizada se repita en varias copias separadas y me han dicho que debería usar NSNib o NSViewController. Tengo una vista personalizada en un archivo de punta, cada vez que un usuario hace clic en un botón, quiero una nueva copia de la vista de punta para que aparezca, mientras mantengo la anterior en otro lugar en la pantalla para hasta diez vistas separadas corriendo simultáneamente . Dado que cada uno de estos toma alguna entrada del usuario antes de aparecer, supongo que deben ser objetos separados o algo para que sean distintos y no interfieran entre sí.Cocoa: cómo usar NSNib varias veces de forma independiente

puedo hacer el primero de los puntos de vista aparecerá utilizando

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"IndividualTimers" bundle:nil]; 

[nib instantiateNibWithOwner:self topLevelObjects:nil]; 

Pero eso sólo hace que la misma vista reinicio cada vez que se pulsa el botón, te puedo decir que ambos puntos de vista se han combinado en ese punto de vista, porque un temporizador que aparece en él comienza a marcar dos veces más rápido, pero deben verse independientemente en dos instancias diferentes de la vista.

Alguien me dijo que debería usar establecer el propietario de un archivo diferente.

Hasta ahora las personas han sido útiles pero no muy específicas. No sé qué propietario del archivo debo establecer, cómo crear un nuevo objeto programáticamente para contener cada instancia del plumín cargado (si es así como lo hago) o si necesito un objeto individual para cada carga.

Básicamente, quiero saber cómo tomar un archivo de punta, y usarlo como plantilla para cargarlo hasta diez veces separadas, mientras que cada una de las (hasta) diez vistas se ejecuta simultáneamente, pero de forma independiente.

Realmente agradecería cualquier ayuda específica que pueda dar, ya que este es el problema más grande que he encontrado al programar en Xcode. Estuve atrapado por semanas. Gracias por toda la ayuda.

+0

¿Qué sucede cuando se hace la creación de instancias varias veces? ¿Es el mismo objeto? Esta podría ser la fuente de tus problemas. ¿Qué tipo de objeto es uno mismo? – ThomasW

+0

Supongo que es la instancia particular de la clase (de la cual solo hay una), y es por eso que creo que me dijeron que cada vez que se inicia la acción, se reutiliza el mismo objeto, en lugar de crear uno nuevo. – Elbimio

+0

Creo que deberá proporcionar más información acerca de en qué clase se llama este código. – ThomasW

Respuesta

6

Al crear una instancia de un archivo de punta, asigna los objetos no archivados a las propiedades del propietario del archivo.

Si conecta una propiedad IBOutlet UIView a la vista raíz en su plumilla, cuando se crea una instancia del plumín, el objeto recién creado se asignará a esa propiedad.

Para crear un nuevo objeto cada vez que se crea una instancia de la punta, debe copiar el valor de la propiedad IBOutlet en otro lugar, ya que se sobrescribirá la próxima vez que se crea una instancia de la punta.


Por ejemplo, suponiendo que se ha conectado una propiedad timerViewFromNib a un NSView en su archivo de punta:

@property (nonatomic, assign) IBOutlet NSView *timerViewFromNib; 
@property (nonatomic, assign) NSView *timerView1; 
@property (nonatomic, assign) NSView *timerView2; 

Usted puede agregar obtener y mostrar dos instancias distintas de ese punto de vista de la siguiente manera:

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"IndividualTimers" bundle:nil]; 

[nib instantiateNibWithOwner:self topLevelObjects:nil]; 
self.timerView1 = self.timerViewFromNib; 
self.timerView1.frame = CGRectMake(...); 
[self.view addSubview:self.timerView1]; 

[nib instantiateNibWithOwner:self topLevelObjects:nil]; 
self.timerView2 = self.timerViewFromNib; 
self.timerView2.frame = CGRectMake(...); 
[self.view addSubview:self.timerView2]; 

self.timerViewFromNib = nil; 
+0

Por propiedad timerView, ¿te refieres a la vista principal que mostrará cada una de estas subvistas? – Elbimio

+1

En este ejemplo, el UIViewController que es el propietario del archivo del plumín debe tener una propiedad 'timerViewFromNib' (conectada a un NSView en el archivo nib). – titaniumdecoy

+0

Sí, pero dado que es un NSView, ¿es el NSView en mi archivo de punta lo que mostrará cada vista individual, o es el NSView al que se agregarán esas vistas individuales? – Elbimio

Cuestiones relacionadas