Mam UIViewController z własnym .xib, i chcę użyć UISegmentedControl do wyświetlania różnych informacji w dolnej połowie ekranu. Utworzyłem UIView w pliku .xib kontenera i połączyłem go z właściwością UIView o nazwie detailView
w kontrolerze UIViewController.Ładowanie .xibs do UIView
Następnie utworzyłem trzy pliki .xib w IB, jeden dla widoku, który każdy segment musi wyświetlić w obszarze detailView
.
Utknąłem, ponieważ nie wiem, jak załadować i wyładować odpowiedni plik .xib do obszaru detailView
. Oto gdzie jestem:
- (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;
}
}
Więc jak mam wypełnić puste pola i wyładować/załadować detailView UIView prawidłowo?
Dzięki!
--UPDATE--
Kod w viewDidLoad jest: - (void) viewDidLoad { [bardzo 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);
}
a wiadomości debugger są:
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
Dzięki!
Nie jestem pewien, jak to połączyć. Czy muszę wywoływać 'loadNibNamed: owner: options:' dla każdego pliku .xib?Czy możliwe byłoby zobaczenie jakiegoś przybliżonego kodu, aby dowiedzieć się, jak to zrobić? Dziękuję bardzo! –
Dodałem kod do mojej odpowiedzi. –
Ole, dzięki za świetny kod! Jedynym problemem, na który napotykam, jest to, że kiedy wywołuję funkcję -loadNibNamed: owner: options, NIB jest nakładany na cały widok, który powinien znajdować się wewnątrz. Wygląda na to, że 'self.detailView = nibView;' nie zmienia rozmiaru załadowanego NIB, aby zmieścić się wewnątrz detailView, który został ustawiony w IB. Jakieś pomysły tutaj? Dzięki! –