gpt4 book ai didi

ios - 推送 segue 动画不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 06:02:38 25 4
gpt4 key购买 nike

我正在开发一个使用 Objective(只有一个类)编码的应用程序,而该应用程序的其余部分是用 Swift 编写的。在我的应用程序中,我有 3 个 Storyboard,这些 Storyboard相应地有它们的 viewControllers

Issue: Sometimes i change the rootViewController using beow code, the push segues animation stop working after that.

// constant to share globally 
let kApplicationDelegate = UIApplication.shared.delegate as? AppDelegate

let controller = UIStoryboard().getControllerInstance(storyBoardName: "Autograph", identifire: "loginSuccessVC")
kApplicationDelegate?.window?.rootViewController = controller

最佳答案

如何正确地进行 Push Segue Transition

我知道现在回答这个问题有点晚了!但迟到总比不到好!

要事第一:
要使推送转换正常工作,您必须让 UINavigationController 将您当前的 ViewController 作为 rootViewController 托管。这到底是什么意思?

示例:
有两个或多个 ViewController(此处为 ViewController == VC)A、B 等。如果您当前在 VC A 中,并且想移动到 VC B,在 VC A 中对按钮操作执行推送(或详细信息)转换,请记住您的 VC A 必须是 UINavigationController 的 RootViewController >.

[  UI         ]                          [     ]            [     ]
[ Navigation ]-- RootViewController ==O>[ A ]--- Push -->[ B ]
[ Controller ] [ ] [ ]

否则无效。它会表现为一个现在模态转换。

到目前为止,我已经认识到实现这一目标的两种方法。一种是纯编程方式,另一种是联合使用 StoryBoard 和 Code。

以编程方式:
为了便于解释,我会将我的 UINavigationController 嵌入到 UIViewController 堆栈的开头。为了实现这一点,我们必须对 AppDelegatedidFinishLaunchingWithOptions launchOptions 方法做一个小改动。它应该如下所示:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialVCIdentifier = "AViewController" // A ViewController **
let firstVC = storyboard.instantiateViewController(withIdentifier: initialVCIdentifier)
let nav = UINavigationController(rootViewController: firstVC) // Assigning the A VC as the RootViewController of the NavigationController
window?.rootViewController = nav // Look for the *** Note bellow
window?.makeKeyAndVisible()

return true
}

** 您必须在 InterfaceBuilder 中表示 VC 的 ViewController 标识符。我假设您的 Storyboard名称是 Main.storyboard。
*** 如果您不为初始 View Controller 执行此操作,只需将此 UINavigationController 作为模态 VC 在您的 VC 工作流路径中呈现

在 VC A 中的按钮操作中,它应该如下所示:

@IBAction func TestBtnAct(_ sender: Any) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "BViewController") as UIViewController
navigationController?.pushViewController(vc, animated: true)
}

就是这样!我认为,如果您已经像我上面提到的那样尝试过,它应该已经发挥了魔力。

Storyboard和代码携手:
这意味着您的 VC A 已经由 Storyboard设计中的 UINavigationController 托管。在这种情况下,您不需要以编程方式创建 UINavigationController 并将 VC A 作为 RootViewController 嵌入。只需执行上述按钮操作就足够了。

希望这对外面的人有帮助。这是一个 sample project I have done and uploaded in GitHub供大家学习之用。

干杯!

关于ios - 推送 segue 动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45005346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com