2013-12-04 4 views
4

Стандартный или Forward Segue можно щелкнуть в построителе раскадровки, а стиль можно изменить на «Пользовательский». На этом этапе можно указать класс Segue. Однако это невозможно для Unwind Segue. В Unwind Segues указывается только идентификатор и действие. Это объясняет, что их тип «Unwind Segue», но есть ли способ создать пользовательский класс Segue для этих Unwind Segues?Пользовательский класс Segue для размотки Segue

+2

http://www.bencz.com/hacks/2014/02/07/custom-ios-segues-in-xcode-5/ – Fattie

ответ

2

Я обнаружил, что для того, чтобы реализовать пользовательские размотать SEGUE я должен был подкласс UINavigationController и переопределить этот метод следующим образом:

-(UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier { 
UIViewController *controller = self.topViewController; 
UIStoryboardSegue *unwindSegue; 

if ([controller isKindOfClass:[YourClassThatNeedsCustomUnwind class]]) { 
    unwindSegue = [controller segueForUnwindingToViewController:toViewController fromViewController:fromViewController identifier:identifier]; 
} 

if (unwindSegue) { 
    return unwindSegue; 
} else { 
    return [super segueForUnwindingToViewController:toViewController fromViewController:fromViewController identifier:identifier]; 
} 
} 

Тогда в UIViewController, где обычай размотать переход требуется переопределить этот метод:

- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier { 
YourCustomUnwindSegue *segue = [[YourCustomUnwindSegue alloc] initWithIdentifier:identifier source:fromViewController destination:toViewController]; 
return segue; 
} 

Наконец в пользовательский класс UIStoryboardSegue просто переопределить «- (недействительными) выполнить:» метод и положить все анимации (или в моем случае отсутствия анимации) вам нужно.

- (void)perform 
{ 
UINavigationController *containerVC = (UINavigationController*)[self.destinationViewController parentViewController]; 
[containerVC popToViewController:self.destinationViewController animated:NO]; 
} 

Надеюсь, что это поможет кому-то.

+0

Примечание: я реализовал это в iOS8 – CodenameDuchess

+0

Вы можете определить протокол ViewControllerWithCustomUnwindProtocol с segueForUnwindingToViewController: fromViewController: identifier: определено на нем. Любой ViewController, требующий настраиваемого раскручивания, просто реализует этот протокол (легко для VC, так как метод уже существует в базе). Затем вашему подклассу UINavController нужно только проверить реализацию протокола и будет работать для всех пользовательских VC без модификации кода (более развязано). – Joshcodes

+0

Спасибо Joshcodes, когда я получу свободный момент, я собираюсь вернуться назад и посмотреть, как это реализовать. – CodenameDuchess

4

Возможно, вы хотите взглянуть на статью http://dadabeatnik.wordpress.com/2013/10/13/custom-segues/. Он подробно объясняет пользовательские варианты.

+1

Я следил за объяснениями на пользовательских раскручивающих сегментах, и пока все в порядке. Но вы должны, вероятно, включить эти части в этот ответ ... – Jonny

+1

Страница больше не доступна –

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