我正在使用控制器包含API實現自定義的segue,沒有presentViewController的自定義Segue沒有正確地展開
@implementation CustomSegue
- (void)perform {
UIViewController *sourceViewController = self.sourceViewController;
UIViewController *destinationViewController = self.destinationViewController;
[sourceViewController addChildViewController:destinationViewController];
destinationViewController.view.alpha = 0.0;
[sourceViewController.view addSubview:destinationViewController.view];
[UIView animateWithDuration:0.3 animations:^{
destinationViewController.view.alpha = 1.0;
} completion:^(BOOL finished) {
[destinationViewController didMoveToParentViewController:sourceViewController];
}];
}
@end
視圖控制器的層次結構很簡單:sourceViewController → destinationViewController
當從destinationViewController
在[UIStoryboardUnwindSegueTemplate _perform:]
有例外Could not find a view controller to execute unwinding for <…>
展開到sourceViewController
,應用程序崩潰我沒有實現自定義-[UIViewController viewControllerForUnwindSegueAction:fromViewController:withSender:
或 -[UIViewController canPerformUnwindSegueAction:fromViewController:withSender:
這意味着框架返回正確的值(雖然我實現了它一次檢查)。
在segue中將我的自定義addChildViewController:…
代碼替換爲presentViewController:…
時,它工作正常:展開按預期執行。
問題:是否有可能創建自定義視圖控制器層次結構的自定義segue?
測試用例項目:https://bitbucket.org/zats/unwind/
不要認爲它會解決您的問題,但是......您應該確實有一個包含源控制器的容器控制器,然後將目標控制器添加到容器中。然後做動畫,然後刪除源控制器。將目標控制器添加到源控制器有點奇怪。下面是一個執行的例子,它可以正確調用正確的東西,並更改視圖控制器層次http://pastebin.com/Vk9JfcmP。可能有些用處? –
它並沒有真正改變代碼崩潰的事實:)目前,層次結構對我而言並不重要 –
可能是因爲腐敗的層次結構導致問題,儘管... –