在 Swift 中单击以编程方式切换到 TableViewCell 上的导航视图
Posted
技术标签:
【中文标题】在 Swift 中单击以编程方式切换到 TableViewCell 上的导航视图【英文标题】:Programmatically switch to navigation view on TableViewCell click in Swift 【发布时间】:2017-07-19 10:12:05 【问题描述】:我能够创建一个 ios 应用程序,您可以在其中使用按钮在视图之间切换。这些视图有一个导航控制器,因此您可以返回。
不过我想稍微调整一下。
相反,我希望有一个没有导航控制器的单一视图。 然后,当单击表格视图中的单元格时,我想导航到具有导航控制器的下一个视图。
我可以在界面构建器中使用 segue 来实现这一点,但我不想通过构建器来管理它。这是因为当我对表格视图中单击的单元格进行了一些检查后,我只想转到下一个视图。
所以基本上我需要以编程方式更改视图。
这是我到目前为止所做的:
我有一个普通的视图控制器。 然后我在它旁边有一个导航控制器,之后链接到一个新的视图控制器。 我给了这个 View 的 storyboard ID 为 presetController。然后我的表格单元格 onclick 函数中有以下代码:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController
self.present(nextViewController, animated:true, completion:nil)
现在这段代码将我带到下一个视图,但没有加载导航控制器。
如何使导航控制器链接到该视图?它已经通过编辑器选项卡链接嵌入到其中。
解释故事板的照片:
StoryBoard
【问题讨论】:
你能贴出故事板的截图吗? 添加了故事板图片 【参考方案1】:您需要将 View Controller 与 Navigation Controller 交换,然后执行以下代码:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController
self.present(nextViewController, animated:true, completion:nil)
这将使您的导航栏后退按钮出现
【讨论】:
它是右边的视图控制器,我不知道名字,因为它在打印屏幕上和你的代码上都不可见,但基本上你需要: NavigationController -> ViewController (with tablecell ) -> SecondViewController 如何交换它们? ViewController 是你的初始视图控制器吗? 如果您看到我放入代码中的照片,我有 2 个视图控制器。第一个(左)是我的首字母。 所以只需将 NavigationController 设为初始值,然后使用 segue 将 viewcontroller 设置为 rootviewcontroller,然后使用您拥有的代码【参考方案2】:如果您的链接导航控制器来自新控制器并且您正在打开 presntview 控制器,那么您将成为这样
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController
let navController = UINavigationController(rootViewController: nextViewController)
self.present(navController, animated:true, completion: nil)
【讨论】:
您正在显示当前视图控制器,您只能将其关闭。如果你想返回按钮而不是你应该推送视图控制器并在 appdelegate 中制作导航控制器【参考方案3】:使用 ppinho 的建议,我将导航控制器作为入口点。
由于我不想在第一个视图中显示导航控制器,因此我使用以下代码将其隐藏:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: animated)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: animated)
然后我将新视图添加到导航中,如下所示:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetViewController
self.navigationController?.pushViewController(nextViewController, animated: true)
【讨论】:
【参考方案4】:在这里
let nextScreen = storyboard?.instantiateViewController(withIdentifier: "nextScreenIdentifier") as! NextScreenControllerName
self.navigationController?.pushViewController(nextScreen, animated: true)
把它写在视图控制器的任何函数中。
【讨论】:
以上是关于在 Swift 中单击以编程方式切换到 TableViewCell 上的导航视图的主要内容,如果未能解决你的问题,请参考以下文章
当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?
你能以编程方式在iOS 8(w / Swift)中切换“请勿打扰”模式吗?
Swift:以编程方式在 UICollectionViewCell 中的 IndexPath 中的多个 UIButton,下一个 addTarget 不单击