所以我有视图控制器A,它以模态方式呈现视图控制器C,它(假设在视图控制器C上完成某些事情)展开回A,传递一些数据,立即通过推送将视图控制器B推送到其NavController上segue,传递来自C的数据。除了最终推进segue没有发生之外,一切似乎都在起作用。这是在视图控制器A中处理Unwind segue的方法。
- (IBAction)done:(UIStoryboardSegue *)segue
{
NSLog(@"Called");
GameViewController *vc = (GameViewController *)segue.sourceViewController;
self.gameToBeShown = vc.game;
[self performSegueWithIdentifier:@"showNewGame" sender:self];
}
(" showNewGame" segue通过Storyboard设置为从A到B的推送segue,ctrl +从A的文件所有者拖到B。)
我可以从Log验证是否正在调用该方法,但是segue从未发生过。解除回调是否过早以至于手动触发此segue?
答案 0 :(得分:0)
是的,这是我认为的时间问题。这很脏但是有效:
UIViewController *source = segue.sourceViewController;
[source dismissViewControllerAnimated:YES completion:^{
// FIXME: Need to trigger this segue...
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"One -> Two" sender:@"blah"];
});
}];
答案 1 :(得分:-1)
您可以在unwind segue / performSegueWithIdentifier: problems
找到答案仅当您将逻辑从viewWillAppear:移动到viewDidAppear时,此方法才有效: 这种方法的缺点是在转换过程中你会在屏幕上看到一个小故障。