1

У меня есть модальный вид, который представлен через UIModalTransitionStylePartialCurl переход. В этой точке зрения модального есть кнопка, которую я хотел бы:presentModalViewController от UIModalTransitionStylePartialCurl viewController

  1. отклонить текущий вид модальный (скручиваться вниз), то
  2. настоящего нового модального вида (обложка вертикали).

Однако, когда я пытаюсь следующим, он просто увольняет завиток вида модальный но не представляет новый:

[self dismissModalViewControllerAnimated:YES]; 
NewView *vc = [[NewView alloc] init]; 
[self.parentViewController presentModalViewController:vc animated:YES]; 

У меня есть ощущение, что нужно делать с этой последней строкой. Представление NewView на self тоже не работает. Как я могу это сделать?

+0

какой класс сам? –

+0

self - это модальный вид, который отображается под слоем страницы. – Keller

ответ

3

Вы используете iOS 5?

Если да проблема, которую Вы видите, это связано с изменением документированной здесь: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/parentViewController

Важный бит в этой связи заключается в следующем:

Перед прошивкой 5.0, если вид не было контроллер родительского представления и был представлен модально, контроллер представления, который его представлял, будет возвращен. Это уже не так. Вы можете получить контроллер представления представления, используя свойство presentingViewController.

Таким образом, изменение на self.presentingViewController может исправить вашу проблему, но, вероятно, этого не произойдет.

Используя этот код из первого модального:

[self dismissModalViewControllerAnimated:YES]; 
SecondViewController *sec = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self.presentingViewController presentModalViewController:sec animated:YES]; 

Вы не видите новый контроллер взглядов.

Чтобы получить то, что вы после этого вы хотите использовать новый (на iOS5) Метод:

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion 

Этот метод рекомендуется для замены presentModalViewController.

И пользовательский метод на первый контроллер представления, что-то вроде:

- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController 

Этот метод может и отклонить текущее модальность и представить новую, что-то вроде этого:

- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [self presentViewController:newViewController animated:YES completion:NULL]; 
    }]; 
} 

Использование блок завершения, чтобы запустить новый модальный, давайте подождем, пока старый модальный анимирован. Поэтому во втором модульном контроллере просмотра вы вызываете свой собственный метод на своем первом модульном контроллере просмотра и позволяете ему управлять увольнением/представлением нового.

+0

Спасибо за обновление iOS 5, я был удивлен, увидев, что self.parentViewController возвращает нуль и пропустил строку, указанную в документации. Еще раз спасибо +1. –

+0

невероятно, спасибо большое! – Keller

0

Первое, что нужно проверить, если self.parentViewController - это нуль или нет.

NSLog(@"parent == %@", self.parentViewController); 

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

[self.caller performSelector:@selector(launchNewView:) 
        withObject:nil 
        afterDelay:1.0]; 
[self.caller dismissModalViewControllerAnimated:YES]; 

здесь self.caller является «родителем», который был установлен на UIViewController как раз перед тем был представлен модально.
Я не считаю это идеальным решением, но оно работает в моем тесте.

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