以编程方式显示到控制器的导航

Posted

技术标签:

【中文标题】以编程方式显示到控制器的导航【英文标题】:Show navigation to Controller programatically 【发布时间】:2020-10-31 08:36:46 【问题描述】:

我正在将菜单 VC 从 StoryBoard 更改为编程操作。

当我想加载另一个 VC 时,我使用的是 Action Segue “Show”。

我使用的临时代码有效,但将 VC 弹出顶部。您能否以编程方式执行“显示”等效项,如果可以,如何操作?

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "SunriseSunsetResultsViewController")
self.present(newViewController, animated: true, completion: nil)

【问题讨论】:

怎么样,呃,show? developer.apple.com/documentation/uikit/uiviewcontroller/… 嗨 - 我发现并推测它可能是答案,但没有在线上找到支持信息,例如 SO,关于人们如何使用它,因此这篇文章的原因。我尝试了各种实现,例如 func show(_ vc: DistanceFromSunViewController, sender: self ) 但无法破解... 好吧,我不知道你所说的“破解它”是什么意思。它确实有效,如果您在导航界面中。假设您在使用情节提要执行此操作时处于导航界面中,因此需要保持不变。 破解它是指让它工作。我曾尝试过 self、UITableViewCell、UINavigationController 等,但大多数时候编译器会返回“函数声明体中的预期 ''”样式错误。我确实尝试解决我自己的问题,但这似乎是那些更晦涩的命令之一,几乎没有网络支持信息。非常感谢您的指导。他们很感激。 “函数声明体中的预期''”样式错误“好的,但这与您提出的问题完全无关。 【参考方案1】:

要执行 Show segue 过去所做的事情,请将 present 替换为 show

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "SunriseSunsetResultsViewController")
self.show(newViewController, sender: self)

但是请注意,这将与present 执行相同的操作,除非self.navigationController 不是nil。换句话说,除非导航控制器负责界面,否则您无法进行以前的横向导航。

您可以说pushViewController 等,而不是show,但同样的警告也适用。只有导航控制器才能完成您之前所做的事情。

【讨论】:

以上是关于以编程方式显示到控制器的导航的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的后退按钮未显示在导航栏中?

以编程方式向导航控制器添加自动布局约束

以编程方式创建的 iOS UITabBarController 未显示其“更多”导航控制器

导航视图控制器不显示后退按钮

无法以编程方式导航到另一个 UIViewController iOS

如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作