2012-01-25 5 views
6

Я пытаюсь реализовать переход на iBooks-flip в качестве раскадровки. Сег должен двигаться соответственно. поместите destinationViewController в/из стека UINavigationControllers.Custom Segue Pushing/Popping UIViewControllers

Я могу нажать viewcontrollers в своих методах perform, но я не могу поп. Когда я выхожу из контроллера сразу после создания моей флип-анимации, анимация не запускается, и ее обратный вызов, который должен выполнять [[UIApplication sharedApplication] endIgnoringInteractionEvents], никогда не вызывается, а результаты моего приложения мертвы.

Итак, я попытался нажать/поменять метод делегата animationDidStop:anim:flag, но он никогда не вызывается с флагом, установленным в true.

Я предполагаю, что segue освобождается до вызова метода делегата. Что еще я мог сделать?

+0

Вы должны использовать iOS5, если используете раскадровки. Почему бы не использовать 'UIPageViewController'? Он реализует все стандартное поведение с переворотом страницы, которое вы видите в iBooks. –

+1

Я не говорю о pagecurl, а о перевороте с книжной полки ibooks в магазин и обратно. – cschuff

+0

В принципе, вы хотите, чтобы два диспетчера представлений отображались как «спина к спине», так что вы можете переключаться между ними по желанию, в том же пространстве, или находиться в стеке, причем один имеет приоритет над другой, я? Я не буду публиковать это как ответ, пока не буду на 100% уверен, но я задаюсь вопросом, было бы лучше представить иллюзию этого вместо этого (так, допустим, у вас есть представление в виде таблицы и карты. Сделайте одно из основных, перейдите к второстепенному с переворотом и сделайте обратный переворот «спиной» как таковой. Придется попробовать это ...) –

ответ

5

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

(1) В вашем раскадровке (с ViewController A & B) создайте Модальный Segue от A до B. Дайте ему идентификатор (showViewControllerB) и выберите Transition: Flip Horizontal.

Мы создали протокол и делегатов:

(2а) В ViewControllerB.h добавить выше @interface:

@class ViewControllerB; 

@protocol ViewControllerBDelegate 
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller; 
@end 

(2b) Добавить делегат как свойство:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate; 

(3a) В ViewControllerB.m синтезируется:

@synthesize delegate; 

(3b) и делегат в методе, чтобы перевернуть обратно:

- (IBAction)flipBack:(id)sender 
{ 
    [self.delegate viewControllerBDidFinish:self]; 
} 

(4) В ViewControllerA.h добавить на самом верху #import "ViewControllerB.h" и на конце @interface <ViewControllerBDelegate>

(5а) в ViewControllerA.m добавить метод в соответствии с протоколом:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

(5б) Затем установите его в качестве делегата в prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) { 
     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

Надеюсь, это ответит на ваш вопрос. Если я не понял, просто дайте мне знать.

0

Ваш вопрос немного запутанный, так что смешайте поп, нажмите, откиньтесь и откиньте назад. Я не уверен, может ли ай ответить на ваш вопрос, но я могу сказать, что я сделал.

Если я нажимаю viewController в стек контроллера навигатора и устанавливаю стиль Segue Storyboard Push, он будет перемещен в представление справа налево. Появится кнопка «Назад» и отобразит в ней заголовок присутствующегоViewController.

Если я установил стиль Stegboard Segue в Modal, я могу установить переход на Flip Horizontal (что, кажется, то, что вы хотите). Но тогда не появится кнопка «Назад». В presentedViewController я отклонять представление с:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Это будет переворачивать второй вид сзади с правой флип.

Но это грязное решение, и оно не рекомендуется яблоком.

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

Люк Dubert дал вам пример, как реализовать делегат.

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