self.navigationController 在 swift 中为零
Posted
技术标签:
【中文标题】self.navigationController 在 swift 中为零【英文标题】:self.navigationController is nil in swift 【发布时间】:2014-12-10 17:00:42 【问题描述】:我的故事板中有 6 到 7 个视图控制器,在这个视图控制器中,我将 self.navigationController 设为 nil,但在其他任何地方都可以使用。我在其他地方都做过同样的事情,但这个不起作用。我想不通为什么? 导入 UIKit
class wkScreen2ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad()
super.viewDidLoad()
// tableView.estimatedRowHeight = 500
tableView.rowHeight = UITableViewAutomaticDimension
// tableView.scrollEnabled = true
// Do any additional setup after loading the view.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// Return the number of rows in the section.
return 3
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
UITableViewCell
if(indexPath.row == 0)
var cell: Cell1TableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell1") as Cell1TableViewCell
return cell
if(indexPath.row == 1)
println("2")
var cell: Cell2TableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell2") as Cell2TableViewCell
return cell
if(indexPath.row == 2)
println("3")
var cell: Cell3TableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell3") as Cell3TableViewCell
return cell
return UITableViewCell()
func navigateTowkScreen3()
println("next2")
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var wkScr3 = mainStoryboard.instantiateViewControllerWithIdentifier("wkScreen3") as wkScreen3ViewController
println(wkScr3)
println(self.navigationController)
self.navigationController?.pushViewController(wkScr3, animated: true)
https://www.dropbox.com/s/0q7whsgiq3nw14e/Screen%20Shot%202014-12-10%20at%203.39.06%20PM.png?dl=0
【问题讨论】:
你确定它有导航控制器吗?并非所有视图控制器都这样做。 如何确定它是否有导航控制器,我猜这是一个菜鸟问题,但我对这个视图控制器做了同样的事情,就像其他人做的一样 好吧,故事板里面有导航控制器吗?如果是这样,进入这个控制器的 segue 类型是什么? (你能显示故事板的截图吗?) dropbox.com/s/0q7whsgiq3nw14e/… 这是屏幕截图。 wkScreen2ViewController 的导航控制器为 nil 【参考方案1】:解决此问题的最简单方法是使用 segue。
您说您想在实际进入下一个屏幕之前检查按下下一个按钮时的条件。
所以,您首先需要添加转场。但是,您需要将它从第一个视图控制器(小黄色框)添加到第二个视图控制器,而不是将其从 Next 按钮添加到视图控制器。
像这样……
然后给 segue 一个标识符,如WalkThrough1Segue
。
现在,如果您的代码将拥有像这样的下一个按钮功能...
func navigateTowkScreen3()
// first check your condition
if (/*some condition*/)
// trigger the segue
performSegueWithIdentifier("WalkThrough1Segue")
【讨论】:
以上是关于self.navigationController 在 swift 中为零的主要内容,如果未能解决你的问题,请参考以下文章
self.navigationController.tabBarController.selectedIndex 不起作用
self.navigationController 在 swift 中为零
self.navigationController 分配为 RootViewController 后为空?
iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?
Objective-C:使用 self.navigationController 和自定义 UINavigationController
使用 self.navigationController.hidesBarsOnSwipe = true 隐藏导航栏,将其永久隐藏