переключаться между uiviews с помощью кнопок, а не контроллеров uinavigation - PullRequest
3 голосов
/ 06 июня 2009

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

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

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

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

Спасибо за миллион!

Ответы [ 2 ]

2 голосов
/ 06 июня 2009

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

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

// 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;
}
1 голос
/ 09 июня 2009

Техника, которую я обычно использую, включает создание класса superview, который содержит панель инструментов внизу и класс 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...