在没有 segue 的情况下展开到特定的视图控制器
Unwind to a specific view controller without a segue
不使用故事板时,如何获得与展开转场相同的功能?假设我有一个导航控制器,里面有几个视图控制器,我想顺利地回到某个控制器。你会如何做到这一点?
你可以在 UINavigationController 上写一个扩展来实现这个。根据您的评论,您想设置一个标识符并返回使用该特定标识符。为此,您可以编写一个简单的协议:
protocol Unwindable {
var identifier: String { get set }
}
你所有的视图控制器都应该确认这个协议并设置标识符值。像这样实现 UINavigationController 扩展:
extension UINavigationController {
func goBackToInstance(withIdentifier identifier: String) {
let mapped = self.viewControllers.compactMap{ [=11=] as? Unwindable }
for vc in mapped.reversed() {
if (vc.identifier == identifier) {
self.popToViewController(vc as! UIViewController, animated: true)
}
}
}
}
然后您可以返回使用:
self.navigationController?.goBackToInstance(withIdentifier: "Your Identifier")
不使用故事板时,如何获得与展开转场相同的功能?假设我有一个导航控制器,里面有几个视图控制器,我想顺利地回到某个控制器。你会如何做到这一点?
你可以在 UINavigationController 上写一个扩展来实现这个。根据您的评论,您想设置一个标识符并返回使用该特定标识符。为此,您可以编写一个简单的协议:
protocol Unwindable {
var identifier: String { get set }
}
你所有的视图控制器都应该确认这个协议并设置标识符值。像这样实现 UINavigationController 扩展:
extension UINavigationController {
func goBackToInstance(withIdentifier identifier: String) {
let mapped = self.viewControllers.compactMap{ [=11=] as? Unwindable }
for vc in mapped.reversed() {
if (vc.identifier == identifier) {
self.popToViewController(vc as! UIViewController, animated: true)
}
}
}
}
然后您可以返回使用:
self.navigationController?.goBackToInstance(withIdentifier: "Your Identifier")