推送segue动画不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推送segue动画不起作用相关的知识,希望对你有一定的参考价值。
我正在一个用Objective编写的应用程序(只有一个类)和用Swift编写的应用程序的其余部分。在我的应用程序中我有3个故事板,这些故事板相应地有他们的viewControllers
。
问题:有时我使用beow代码更改
rootViewController
,推送segues动画在此之后停止工作。
// constant to share globally
let kApplicationDelegate = UIApplication.shared.delegate as? AppDelegate
let controller = UIStoryboard().getControllerInstance(storyBoardName: "Autograph", identifire: "loginSuccessVC")
kApplicationDelegate?.window?.rootViewController = controller
How to do Push Segue Transition Properly
我知道回答这个问题有点迟了!但总比没有好!
第一件事:
要使Push转换正常工作,您必须让UINavigationController
托管您当前的ViewController作为rootViewController
。这是什么意思?
例:
有两个或多个ViewControllers(此处为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
。为了达到这个目的,我们必须对AppDelegate
的didFinishLaunchingWithOptions 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标识符。我假设你的故事板名称是Main.storyboard。 ***如果您没有为初始View控制器执行此操作,只需将此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)
}
而已!我想如果你已经尝试过,就像我上面提到的那样,它应该已经做到了。
故事板和代码携手:
这意味着您的VC A已经由故事板设计中的UINavigationController
托管。在这种情况下,您无需以编程方式创建UINavigationController
并将VC A嵌入为RootViewController。只需执行上述Button操作即可。
希望这对那里的人有所帮助。这是一个sample project I have done and uploaded in GitHub用于学习你所有人的目的。
干杯!
当你改变rootViewController
尝试将navigationController
设置为根而不是navigationController
的rootViewController
。
假设你有一个viewController让它命名为VCA
是UINavigationController
Nav1
的rootViewController。然后,而不是使VCA
作为rootViewController
的kApplicationDelegate?.window?
。尝试制作Nav1
作为rootViewController
的kApplicationDelegate?.window?
。
kApplicationDelegate?.window?.rootViewController = Nav1
动画不起作用,因为它可能不是正在发生的push
。你推动的self.navigationController
的ViewController
可能是零。
以上是关于推送segue动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 Unwind segue 触发时,Push segue 不起作用