IOS: открыть и закрыть некоторые контроллеры представления
В моем приложении у меня есть следующая конфигурация, чтобы открыть мои контроллеры представления:
Когда я пишу "pushViewController", я использую контроллер навигации, а когда я пишу "подарок", я использую presentModalViewController
,
firtsView -> (pushviewcontroller) -> secondOneView -> (present) -> thirdOneView -> (present) -> fourthView
firstView -> (pushviewcontroller) -> secondTwoView -> (present) -> thirdTwoView
Это схема моего приложения для организации моих контроллеров представления. Тогда мой вопрос:
Какой способ вернуться из "четвертого вида" (то есть когда я вернусь из "четвертого вида") в "второй вид"?
Есть ли способ сделать это?
3 ответа
Да это так.
UIViewController
Предлагает различные способы отклонить контроллер представления в зависимости от того, представили ли вы его модально или нет. Это:
-(void)dismissModalViewControllerAnimated:(BOOL)animated; // modal
-(void)dismissViewControllerAnimated:(BOOL)flag
completion:(void (^)(void))completion;
Вам нужно будет отклонить их один за другим. Кроме того, найдите время, чтобы прочитать руководство по программированию View от Apple.
Используя UINavigationController
Вы можете открыть любой контроллер представления, используя:
-(NSArray *)popToViewController:(UIViewController *)viewController
animated:(BOOL)animated;
В качестве альтернативы, другой метод позволяет использовать только один:
-(UIViewController *)popViewControllerAnimated:(BOOL)animated;
Если вы используете presentViewController
я думаю, что вы должны отклонить viewController один за другим
но если вы только навигационный контроллер, то вы можете открыть нужный контроллер, который вы хотите
- в контроллере представления ThirdOneView выполните dismissModalViewControllerAnimated:NO
- в viewcontroller secondOneView выполните dismissModalViewControllerAnimated:NO снова.
- в viewcontroller secondOneView сделать popViewControllerAnimated:NO
- в viewViewtroller firstView сделать pushViewController для secondTwoView
Если вы хотите немного анимации. Я бы предложил сделать это вручную с помощью CoreAnimation. поскольку
-(void)dismissViewControllerAnimated:(BOOL)flag
completion:(void (^)(void))completion;
доступно только после iOS5.