2010-06-21 33 views
9

Tengo el siguiente código para crear una vista y ponerlo en ScrollView para permitir la paginación
el código funciona bien sin embargo lo que no pude hacer es cargar vistas desde un archivo semilla¿Cómo crear una vista desde un archivo nib en xcode?

en otras palabras quiero utilice "initWithNibName" en lugar de "initWithFrame"?

- (void)createPageWithColor:(UIColor *)color forPage:(int)page 
    { 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)]; 
     newView.backgroundColor = color; 
    [scrollView addSubview:newView]; 
    } 

Muchas gracias

+0

si tuviera que hacerlo de esta manera (y, no, pero si usted fuera), que querría recordar el ' [newView release] 'después de agregarlo a' scrollView'. Su scrollView conservará la vista cuando se agregue, por lo que ya no le pertenece a usted. –

Respuesta

14

Creo que lo que te hace falta es que puedes establecer el marco de tu nueva UIView después de cargar el plumín. Load/Init time no es su única oportunidad de eso. También estoy rompiendo la función de carga en sus piezas, en el código siguiente, para que pueda ver más fácilmente lo que está sucediendo.

Observe:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                owner:self 
                options:nil]; 
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array. 
UIView *myView = [nibContents objectAtIndex:0]; 
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need 
[scrollview addSubview:myView]; 

No olvide que para que UIScrollView para desplazarse en realidad, es necesario establecer su propiedad contentSize al tamaño de las mercancías dentro de él, que es probable que más grande que la propiedad .Frame de la vista de desplazamiento en sí.

+0

Eso es lo que estoy diciendo :) Gracias Dan, tu solución funciona perfectamente, sí, he cambiado las posiciones de las vistas en la vista de desplazamiento con algo así como "scrollView.frame.size".ancho * página "para el coordinador x Gracias de nuevo, usted hizo mi día :) – ahmed

3

intentar algo como esto (adaptado de "El libro de cocina de los desarrolladores de iPhone", pág 174.):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject]; 

Esto supone una visión única de objetos en su .xib, pero podrías modificarlo si tu .xib es más complicado.

+0

Gran John, pero necesito especificar la posición de la nueva Vista porque la estoy agregando a una vista de desplazamiento – ahmed

+0

Ha comentado algo que @John N se perdió pero me perdí que NO LO había echado de menos. ¡Así que no importa! –

20

Sé que esta es una publicación anterior, pero quería crear un UIView como un archivo separado y agregar un xib para poder usarlo en varios lugares de mi aplicación (casi como usarlo como una celda de vista de tabla personalizada) . Y no pude entender bien, pero esta publicación me ayudó a llegar al resultado que quería.

Así que si alguien quiere hacerlo de la misma manera, esto es lo que hice:

Esto, unido al código de inicialización en el archivo .m de UIView:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0]; 
    if (self) 
    { 
     self.frame = frame; 
    } 
    return self; 
} 

Luego, en constructor de interfaces/editor xib tiene que asignar la clase que creó para UIView para que pueda agregar IBOutlets.

Espero que ayude a alguien, porque me costó un poco!

+0

Gracias @Matt W. – Meet

+2

No es necesario hacer un nuevo CGRect, simplemente puede hacer' self.frame = frame' –

+0

¡Fantástico! ¡Gran solución! – bbrame

-1

Puede usar mi clase simple https://github.com/ulian-onua/KRNNib para crear una vista desde el archivo nib con una llamada a un método.
Por ejemplo, se puede utilizar en un KRNNib manera siguiente:

UIView *view = [KRNNib viewFromNibWithName:@"TestView"]; 
[self.view addSubview:view]; // add instantiated view as subview to view of current UIViewController 
Cuestiones relacionadas