【问题标题】:Programmatically Pushing a ViewController以编程方式推送 ViewController
【发布时间】:2018-11-19 09:26:20
【问题描述】:

我正在尝试以编程方式推送 ViewController。

代码:

var plus = UIButton()

plus.addTarget(self, action: #selector(plusPressed), for: .touchUpInside)

@objc func plusPressed() {
    print("plus")
    let createJournalVC = CreateJournalViewController()
    self.navigationController?.pushViewController(createJournalVC, animated: true)
}

什么有效:

  1. 按下按钮后,控制台会打印“加号”。

什么不起作用:

  1. ViewController 未推送。

详情

  • 我正在使用导航控制器和标签栏控制器。
  • 我只制作程序,没有故事板。
  • 控制台没有打印错误,实际上什么也没发生。

【问题讨论】:

  • 看到这个寻求帮助:stackoverflow.com/questions/39929592/…
  • 检查plusPressed方法中是否存在navigationController。
  • @Anbu.karthik 但是我的其他项目怎么没有这个问题?
  • @RakeshaShastri 请展开,对不起,我是新人。
  • 在你推送viewController的那一行设置一个断点,当执行在那里停止时,检查navigationController的值

标签: ios swift uiviewcontroller viewcontroller pushviewcontroller


【解决方案1】:

如果 TabBarController 出现在 NavigationController 之后,那么 NavigationController 可以变为 nil。您应该先放置 TabBarController,然后将每个 ViewController(与每个选项卡相关)放入自己的 NavigationController。

故事板:

以编程方式:

你需要像这样创建你的 TabBarController...

window = UIWindow(frame: UIScreen.main.bounds)
let tabCon = UITabBarController()
let navCon1 = UINavigationController(rootViewController: ViewController())
let navCon2 = UINavigationController(rootViewController: CreateJournalViewController())
let navCon3 = UINavigationController(rootViewController: AnotherViewController())
tabCon.viewControllers = [navCon1, navCon2, navCon3]
tabCon.tabBar.items?[0].title = NSLocalizedString("VC", comment: "comment")
tabCon.tabBar.items?[1].title = NSLocalizedString("CJV", comment: "comment")
tabCon.tabBar.items?[2].title = NSLocalizedString("AVC", comment: "comment")
window?.rootViewController = tabCon
window?.makeKeyAndVisible()

【讨论】:

  • 似乎有效,但我无法为每个 TabBarItem 分配任何属性。
  • 您从以下代码中获取每个 tabBarItem 的数组:tabCon.tabBar.items 参考此链接:stackoverflow.com/a/12578423/4566190 如果这对您有用,请将其标记为正确答案...谢谢
  • 我在我的应用程序委托中执行了此操作,但仍然没有任何反应 - pastebin.com/RSKFWCaq
  • 请确保您已经设置了所有控制器的视图backgroundColor,并且您在tabCon.viewControllers数组中只添加了一个选项卡,您只添加了navCon1,虽然我在我的 Mac 上测试了你的代码,它似乎对我来说很好,我在每个标签上都有一个标题。我将在答案中更新我的代码......如果您仍然遇到问题,您可以搜索堆栈溢出
  • 如果您仍然遇到问题,您可以搜索堆栈溢出...提供有关屏幕上实际发生的情况以及您期望的更多详细信息
【解决方案2】:

似乎navigationController 是nil,这就是视图控制器没有被推送的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多