У меня есть UIViewController со своим собственным .xib, и я хочу использовать UISegmentedControl для отображения различной информации в нижней половине экрана. Я создал UIView в контейнере .xib и связал его с свойством UIView с именем detailView
в UIViewController контейнера.Загрузка .xibs в UIView
Затем я создал три .xib-файла в IB, один для представления, что каждый сегмент должен отображаться в области detailView
.
Я сейчас застрял, потому что не знаю, как загрузить и выгрузить соответствующий .xib-файл в область detailView
. Вот где я:
- (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;
}
}
Так как же заполнить я пробелы и выгрузить/загрузить DetailView UIView правильно?
Спасибо!
--UPDATE--
Код в viewDidLoad Сейчас: - (Недействительными) viewDidLoad { [супер 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);
}
и отладчик сообщения являются:
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
Спасибо!
Я не совсем уверен, как это сделать. Мне нужно вызвать 'loadNibNamed: owner: options:' для каждого из .xib?Можно ли увидеть какой-то грубый код, чтобы получить представление о том, как это сделать? Огромное спасибо! –
Я добавил код к моему ответу. –
Ole, спасибо за отличный код! Единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю -loadNibNamed: owner: options, NIB накладывается поверх всего представления, он должен находиться внутри. Кажется, что 'self.detailView = nibView;' не изменяет размер загружаемого NIB, чтобы вписаться в detailView, который был настроен в IB. Есть идеи? Благодаря! –