iphone - 自定义 segue 将特定的 UIViewController 推送到 UINavigationController

标签 iphone ios uinavigationcontroller uistoryboard

我想创建一个自定义 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: 说明我们应该执行哪个。

至于直接从destaltDest,你可以将altDest推到dest之上,然后从导航 Controller 的 View Controller 堆栈中移除 dest

就像关于 iOS 的很多内容一样,如果您根本不使用 Storyboard ,这一切都会变得更加容易和明显。这就是我不喜欢 Storyboard 的原因:它们是如此简单和局限,它们会分散人们对 iOS 真正工作方式的注意力。

关于iphone - 自定义 segue 将特定的 UIViewController 推送到 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254112/

相关文章:

ios - "This certificate has an invalid issuer"问题未解决

ios - UITabBarController 图像未显示

iphone - 提示而不是问题 : Pseudo-Push functionality through pushed email

c# - AppInitializer 始终启动 android 进行跨平台测试

ios - UINavigationController pushViewController 生命周期

ios - CapsPageMenu 隐藏 TableView 上的 NavigationBar 从子 UIViewController 滚动不工作

ios - 检测 View 是否由于按下后退按钮而正在加载

iphone - 如何在数据导入 CoreData 时显示 progressBar?

ios - 我如何在 UIAlertController 中获取 textField 的值?

ios - 如何在 git 上共享 Xcode 性能测试基线?