Tengo un UIViewController con su propio .xib, y quiero usar un UISegmentedControl para mostrar información diferente en la mitad inferior de la pantalla. Creé un UIView en .xib del contenedor y lo conecté a una propiedad de UIView llamada detailView
en el UIViewController del contenedor.Cargando .xibs en un UIView
Luego creé tres archivos .xib en IB, uno para la vista que cada segmento necesita mostrar en el área detailView
.
Ahora estoy atascado porque no sé cómo cargar y descargar el archivo .xib apropiado en el área detailView
. Aquí es donde estoy:
- (void)segmentValueChanged:(id)sender {
switch ([sender selectedSegmentIndex]) {
case 0:
// Unload whatever is in the detailView UIView and
// Load the AddressView.xib file into it
break;
case 1:
// Unload whatever is in the detailView UIView and
// Load the ContactsView.xib file into it
break;
case 2:
// Unload whatever is in the detailView UIView and
// Load the NotesView.xib file into it
break;
default:
break;
}
}
Entonces, ¿cómo tengo que llenar los espacios en blanco y descargar/cargar la DetailView UIView correctamente?
Gracias!
--UPDATE--
El código en viewDidLoad es ahora: - (void) {viewDidLoad [súper viewDidLoad];
// Set the default detailView to be address since the default selectedSegmentIndex is 0.
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"AddressView" owner:self options:nil];
// assuming the view is the only top-level object in the nib file (besides File's Owner and First Responder)
UIView *nibView = [nibObjects objectAtIndex:0];
self.detailView = nibView;
self.detailContainerView.autoresizesSubviews = YES;
[self.detailContainerView addSubview:self.detailView];
NSLog(@"self.view is %@", self.view);
NSLog(@"self.detailContainerView is %@",self.detailContainerView);
NSLog(@"self.detailView is %@", self.detailView);
}
Y los mensajes de depuración son:
self.view is UIView: 0x3a24d80; frame = (0 0; 320 460); autoresize = RM+BM; layer = CALayer: 0x3a35190
self.detailContainerView is UIView: 0x3a1aea0; frame = (20 57; 280 339); autoresize = W+H; layer = CALayer: 0x3a36b80
self.detailView is UIView: 0x3a24d80; frame = (0 0; 320 460); autoresize = RM+BM; layer = CALayer: 0x3a35190
Gracias!
No estoy muy seguro de cómo armar eso. ¿Debo llamar a 'loadNibNamed: owner: options:' para cada uno de los .xib?¿Sería posible ver algún código aproximado para tener una idea de cómo hacer esto? ¡Muchas gracias! –
He agregado un código a mi respuesta. –
Ole, gracias por el gran código! El único problema al que me estoy enfrentando es que cuando llamo a -loadNibNamed: owner: options, el NIB se superpone sobre la vista completa en la que se supone que está dentro. Parece que 'self.detailView = nibView;' no cambia el tamaño del NIB cargado para que quepa dentro de la vista detallada que se configuró en IB. Alguna idea aqui? ¡Gracias! –