Пользовательские Segue Push/Popping UIViewControllers

Я пытаюсь реализовать флип-переход в стиле iBooks в качестве раскадровки. Segue должен нажать соотв. поместите destinationViewController в/из стека UINavigationControllers.

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

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

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


person cschuff    schedule 25.01.2012    source источник
comment
Вы должны использовать iOS5, если используете раскадровки. Почему бы не использовать UIPageViewController? Он реализует все стандартное поведение перелистывания страниц, которое вы видите в iBooks.   -  person Mark Adams    schedule 26.01.2012
comment
Я не про pagecurl а про флип с книжной полки ibooks в магазин и обратно.   -  person cschuff    schedule 26.01.2012
comment
По сути, вам нужны два контроллера представления, которые отображаются вплотную друг к другу, так что вы можете переключаться между ними обоими по желанию в одном и том же пространстве, а не находиться в стеке, где один имеет приоритет над другим, да ? Я не буду публиковать это как ответ, пока не буду уверен на 100%, но мне интересно, было бы лучше вместо этого создать иллюзию этого (скажем, у вас есть представление таблицы и представление карты. Сделайте одно из них основным, перейти на второстепенное с помощью флипа, а обратный флип сделать обратным как таковым. Надо будет попробовать...)   -  person Joe D'Andrea    schedule 20.06.2012


Ответы (2)


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

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

Настраиваем протокол и делегатов:

(2a) В 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>

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

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

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

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

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

person Luke Dubert    schedule 23.06.2012

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

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

Если я установлю стиль перехода раскадровки на модальный, я могу установить переход на «Отразить по горизонтали» (то, что кажется вам тем, что вы хотите). Но тогда кнопка «Назад» не появится. В представленном ViewController я отклоняю представление с помощью:

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

Он перевернет второй вид обратно с правым отражением.

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

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

Люк Дюберт привел пример реализации делегата.

person rockstarberlin    schedule 18.10.2012