2012-02-22 5 views
0

У меня есть приложение с главным диспетчером представлений, который загружает диспетчер представлений «первая страница». после того, как пользователь нажал несколько кнопок, я обменивать «первой страницы: контроллер представления для второй так:Как подключить несколько контроллеров просмотра для приложения IOS для iphone?

 [UIView transitionFromView:self.view toView:self.secondPageVC.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL done) { 
      [self.view removeFromSuperview]; 
     }]; 

Для того, чтобы сделать это я включить файл заголовка„следующей страницы“, что происходит загрузить и создать экземпляр этой следующей страницы в классе текущего контроллера View.

Все это работает нормально, пока я не доберусь до последней страницы. Одна из комбинаций кнопок возвращает пользователя на первую страницу. Однако, когда я пытаюсь включить заголовочный файл первой страницы на последней странице, я получаю ошибки. Я думаю, что происходит, что каждый класс контроллера представления имеет экземпляр следующей страницы в своем определении и когда мы добираемся до последнего страница, добавив instanc e первой страницы вызывает цикл, который компилятор не любит. Может кто-нибудь объяснить мне, что я делаю неправильно? Если я не должен использовать контроллеры представлений, как это, как мне настроить игру с 10 страницами, которые могут вернуться на первую страницу?

ответ

2
  1. В том числе в вашем .м, а не в вашем .h решить проблему
  2. Посмотрите на UINavigationController
+1

Я бы добавил, что если вам нужно обратиться к первому vc в файле заголовка, вы можете использовать объявление прямого класса в своем заголовке ... @ class FirstViewController. – diatrevolo

+0

Спасибо. Я не знал о «декларации прямого класса». Я прочитал об этом и смог решить проблему. – Beleg

0

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

Я не думаю, что это все. В Objective-C объекты не могут быть содержат в других объектах, только относится к другими объектами. То есть вы никогда не храните целый объект в переменной, вы только сохраняете указатель объекту в переменной, поэтому объект не может содержать другой объект в том смысле, что объект на C++ может содержать другой объект.

Я точно не знаю, что происходит с вашим кодом, так как вы не показали нам код или ошибки, но вот как вы можете иметь несколько контроллеров вид ссылаются друг на друга:

@interface MyViewController : UIViewController 

@property MyViewController *next; 

@end 


// ...somewhere in your code... 

MyViewController *vc1 = [[MyViewController alloc] initWithNibName:... bundle:...]; 
MyViewController *vc2 = [[MyViewController alloc] initWithNibName:... bundle:...]; 
MyViewController *vc3 = [[MyViewController alloc] initWithNibName:... bundle:...]; 

vc1.next = vc2; 
vc2.next = vc3; 
vc3.next = vc1; 

Теперь я использую три контроллера вида точно такого же типа здесь, просто чтобы код был коротким, но вам не нужно это делать. Они даже не обязательно все должны использовать одно и то же имя для свойства next. I будет поощрять вас избегать зависимостей между контроллерами представлений, если вы можете - каждый из классов вашего класса контроля действительно должен знать, какой тип следующий? Ваш код будет легче управлять, если они этого не сделают, так что вы можете легко изменить порядок контроллеров, если хотите.