переключаться между uiviews с помощью кнопок, а не uinavigation контроллеров

Я видел сообщение для Как переключать просмотры с помощью кнопок на iPhone? но это не отвечает, как переключаться между представлениями с помощью кнопок. Человек, задавший вопрос, пришел к выводу, что он может переключаться между представлениями с помощью uinavigationcontroller.

Я помещаю следующий код в ibaction, который запускается при нажатии кнопки в основном представлении.

         PhoneNumberViewController *phoneNumberViewController1 = [[PhoneNumberViewController alloc] initWithNibName:@"PhoneNumberView2" bundle:nil];
self.phoneNumberViewController = phoneNumberViewController1;
[self.view removeFromSuperview];
[self.view insertSubview: phoneNumberViewController1.view atIndex:0];

Когда этот код выполняется, все представление просто становится пустым. Если я опущу часть removefromsuperview, представление исчезнет за моей кнопкой, но кнопка все равно останется. Я не уверен, что это правильный способ переключения между кнопками, но если кто-нибудь знает, как это сделать, пожалуйста, помогите. Также, если кто-нибудь знает о каких-либо примерах проектов, которые переключаются между представлениями с помощью кнопок, дайте мне знать.

Бесконечно благодарен!


person Atma    schedule 06.06.2009    source источник


Ответы (2)


Вы удалили представление контроллера представления из его супервизора, а затем добавили к нему подпредставление. Иерархия представлений нарушена в супервизоре контроллера представления (вероятно, в вашем окне). Вот почему вы получаете пустой экран.

Скорее всего, вы захотите сохранить ссылку на исходное представление, а затем заменить ее на новое представление, установив представление контроллера представления на новое представление.

// origView is an instance variable/IBOutlet to your original view.
- (IBAction)switchToPhoneView:(id)sender {
  if (origView == nil)
    origView = self.view;
  self.view = phoneViewController.view;
}

- (IBAction)switchToOriginalView:(id)sender {
  self.view = origView;
}
person Martin Gordon    schedule 06.06.2009
comment
Я действительно сделал это из appdelegate, и все получилось. Он основан на этом сообщении: iphonedevsdk.com/forum/iphone-sdk-development/. Я определенно думаю, что твой путь более чистый. - person Atma; 06.06.2009

Техника, которую я обычно использую, включает создание класса супервизора, который содержит панель инструментов внизу, и класс UIView представления содержимого, заполняющий остальную часть экрана.

Затем я добавляю подпредставления к представлению содержимого, чтобы изменять представления на основе щелчков кнопок. Такой подход делает так, чтобы панель инструментов была постоянной во всех представлениях. Я начинаю с определения вспомогательной функции следующим образом:

-(void) clearContentView {
    //helper to clear content view
    for (UIView *view in [self.contentView subviews]){
        [view removeFromSuperview];
    }
}

Тогда мой IBAction выглядит так:

-(IBAction) buttonClicked{
    self.title = @"Images"; //change title of view
    [self clearContentView]; //clear content view
    [self.contentView addSubview:self.imagesViewController.view]; //add new view
    [self.imagesViewController viewWillAppear:YES]; //make sure new view is updated
    [self enableButtons];  //enable all other buttons on toolbar
    self.imagesButton.enabled = NO;  //disable currently selected button
}
person Dan Lorenc    schedule 09.06.2009