2012-05-25 7 views
0

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

иерархию

view1controller (вызывает presentmodalviewcontroller метода) -> view2controller (вызывает presentmodalviewcontroller метода) -> view3controller (звонки presentmodalviewcontroller) ---> view4controller

Я знаю концепцию, что я всегда могу переключиться с одного вида на другой, используя метод showmodalviewcontroller. Как я могу переключиться с вида 4 на просмотр 3 и на вид 3 для просмотра 2. Вопрос в том, как я могу переключиться на контроллер случайного представления? как из вида 4 для просмотра 2 или из вида 3 для просмотра 1? .. и я не использую навигационный контроллер. Я знаю, что мне не хватает понятия. Может кто-нибудь пролить свет на эту концепцию.

ответ

1

Из справочника UIViewController

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

+0

Спасибо за новую информацию. Я не знал о ** presentViewController **. но работает только на iOS 5. :( –

+0

Хмммм .. спасибо за это ... Я попробую это .... – user1374408

1
AppDelegate *delegate_app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
ABC:; 
    NSUInteger iRan = arc4random() % [delegate_app.viewcontrollerArray count]; 

    if ([(UIViewController *)[delegate_app.viewcontrollerArray objectAtIndex:iRan] isEqual:self]) 
    { 
     NSLog(@"self so not taken"); 
     goto ABC; 
    } 

    [self presentModalViewController:(UIViewController *)[delegate_app.viewcontrollerArray objectAtIndex:iRan] animated:YES];  

viewcontrollerArray выделяется и синтезируется в AppDelegate со всеми контроллерами зрения у вас есть.

0

Если вы хотите перейти с третьего зрения на 1-й взгляд или к этому напоминает формат вы можете попробовать следующий код:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES]; 
0

Я думаю, что вы должны держать только одну модальность присутствовать сразу. Отбросьте без анимации те, которые вам не нужны.

первые модальный:

[view1controller presentViewController:view2controller animated:YES] 

переход ко второму модальный:

[presentingViewController dismissModalViewControllerAnimated:NO] 
[presentingViewController presentViewController:view3controller animated:YES] 

переход к третьим модальному:

[presentingViewController dismissModalViewControllerAnimated:NO] 
[presentingViewController presentViewController:view4controller animated:YES] 

шаг назад к первому модальному:

[presentingViewController dismissModalViewControllerAnimated:NO] 
[presentingViewController presentViewController:view1controller animated:YES] 

Если вам определенно нужно несколько вложенных диспетчеров модального просмотра, вам придется отклонить их в обратном порядке и представлять более одного раза, иногда только с анимированным только последним. Итак, чтобы перейти от 1 до 4, вам нужно представить 2 и 3 без анимации, а затем представить 4-й анимированный. И другой вариант уволил 4 с анимацией и 3 & 2 без анимации. В таком сценарии вам будет лучше использовать навигационный контроллер imho (вам не нужно иметь видимую панель навигации).

see this question for more info

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