2014-01-30 3 views
0

Я пишу приложение iOS7 в Xcode 5 с раскадными версиями. В части приложения мне нужны три экрана, в которых используется один и тот же класс viewController. Эти экраны: UIViewControllers. Я использую UISegmentControl для перехода от экрана к экрану на основе условий. Я отключил управление, если пользователь не выполнил определенные шаги.Использование одного экземпляра класса viewController в Storyboard

Я использовал чек BOOL значения, если были завершены определенные шаги, и установите его значение в YES/NO.

Проблемы в том, когда я хочу, чтобы вернуться к предыдущему экрану - я получаю новый экземпляр моего класса ViewController , Это две проблемы:

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

В моем контроле сегмента это, как я получаю мнение:

-(void)segmentcontrol:(UISegmentedControl *)segment 
{ 

    if (segment.selectedSegmentIndex == 0) 
     { 

    self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"stepOne"]; 
     [self presentViewController:self.viewController animated:NO completion:nil]; 
     } 
    else if (segment.selectedSegmentIndex == 1){ 
     self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"stepTwo"]; 
     [self presentViewController:self.viewController animated:NO completion:nil]; 
    }else { 
    } 
} 

Это viewController подкласс моего BaseViewController - который я использовал для элементов пользовательского интерфейса, который является постоянным на все экраны.

Что я хочу сделать, это вернуть тот же экземпляр класса viewController, когда я изменил элемент управления сегмента на другой вид, используя тот же класс.

Возможно ли это?

+0

'UITabBarController' содержит все необходимые свойства, вы можете использовать его без' UITabBar' и использовать switchControl для переключения между ними. Проверьте [здесь] (http://stackoverflow.com/questions/11544005/uitabbarcontroller-without-a-uitabbar) для справки. – Martol1ni

ответ

2

Непонятно, почему вы используете presentViewController:animated:completion:, но похоже, что вы делаете что-то не так.

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

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

+0

Спасибо, это полезно. Причина, по которой мне нужно повторно использовать контроллеры представлений, заключается в том, что пользователь возвращается к изменению данных на последнем контроллере представления. Поскольку все эти диспетчеры представлений выполняют одну и ту же работу, использование одного класса для всех трех имеет смысл для меня. Я расскажу о том, как реализовать то, что вы предложили выше. Спасибо. – Tander

+0

Один класс, возможно, но несколько экземпляров. Ключ состоит в том, чтобы сохранить список экземпляров, чтобы вы могли повторно отображать, когда это необходимо. – Wain

+0

Хорошо. Я посмотрю, смогу ли я заставить его работать. Ценю вашу помощь. – Tander

Смежные вопросы