我想创建一个自定义 segue,其行为方式与在 UINavigationController View Controller 上使用时的标准推送 segue 相同。我已经实现了我的自定义转场:
CustomSegue.m
-(void)perform {
UIViewController *source = (UIViewController *)[self sourceViewController];
UIViewController *dest =(UIViewController *)[self destinationViewController];
if (1==2 //test) {
[source.navigationController pushViewController:dest animated:YES];
}
else {
UIViewController *altDest = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL]
instantiateViewControllerWithIdentifier:@"alternateView"];
[source.navigationController pushViewController:altDest animated:YES];
}
如您所见,我想使用自定义推送转场的原因是我可以根据用户配置决定推送哪个 View Controller (目前只检查一个简单的 1==2 表达式)。我可以毫无问题地实例化备用 View Controller ,但我想要做的是来回切换而不是每次都重新加载 View Controller (使用后退和下一步按钮)。有没有办法从 Storyboard 中检索现有实例,或者有一些标准的方法可以做到这一点?
最佳答案
与其使用 perform
的自定义 segue,不如按照您描述的方式进行操作,即实时选择是推送 dest
还是 altDest
,要么 (1) 根本不使用 segues,直接调用 pushViewController
,或者 (2) 从 View Controller 整体准备两个 segues,然后调用performSegueWithIdentifier:
说明我们应该执行哪个。
至于直接从dest
到altDest
,你可以将altDest
推到dest
之上,然后从导航 Controller 的 View Controller 堆栈中移除 dest
。
就像关于 iOS 的很多内容一样,如果您根本不使用 Storyboard ,这一切都会变得更加容易和明显。这就是我不喜欢 Storyboard 的原因:它们是如此简单和局限,它们会分散人们对 iOS 真正工作方式的注意力。
关于iphone - 自定义 segue 将特定的 UIViewController 推送到 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254112/