当我的 tableView 在 TabBar 中时,pushViewController 不工作
pushViewController don't work when my tableView is in an TabBar
我在 TabBar 中有一个 TableViewController。
当我 select 我的 tableView 的一个单元格时,我想用 pushViewController(MyNewController) 启动一个新控制器。
这是我的代码:
在我的 TableView 中:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
UINavigationController().pushViewController(myController, animated: true)
}
在我的标签栏中:
func viewDidLoad() {
super.viewDidLoad()
var controllerArray: [UIViewController] = []
let controller: UIViewController = ClubPreviewListViewController()
controller.title = "TEST"
controllerArray.append(controller)
self.view.addSubview(pageMenu!.view)
}
(我使用CAPSPageMenu来定制我的TabBar,但这不是问题,没有我也有同样的问题)
在我的控制器中:
deinit {
print ("TEST")
}
当我 select 一个单元格时,日志写 "TEST" 每次我 select 但不改变视图。
我认为是我的 navigationController 出了问题,但我不知道如何解决。
在我实现 TabBar 之前,我单独使用我的 TableView,推送确实有效。
对不起我的英语!感谢您的帮助。
编辑:
我更改了我的 pushViewController :
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
//UINavigationController().pushViewController(myController, animated: true)
self.navigationController?.pushViewController(myController, animated: true)
}
同样的反应。
我的 NavigationController 不直接 link 与我的 TabBar。我需要创建另一个吗?我不太明白 NavigationController 是如何工作的!
编辑2:
如果我使用 TabBar 的导航控制器而不是 TableView 的导航控制器,视图会发生变化!
self.saveTabBarNavigationController.pushViewController(myController, animated: true)
试试这个,只有当你有导航嵌入式标签栏控制器时它才会起作用
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
navigationController.pushViewController(myController, animated: true)
}
您正在创建一个导航控制器的实例在线
UINavigationController().pushViewController(myController, animated: true)
一旦此方法执行完毕,导航控制器及其视图控制器将被释放,因为没有任何内容保留您的导航控制器。导致 'TEST' 在您的 deinit()
函数中打印。
您应该获取拥有当前选项卡栏控制器的导航控制器并使用它推入堆栈。如果不知道你的应用程序的结构,就很难知道你的导航控制器在哪里(如果它存在的话)。
检查你的故事板,但基本上尝试:
self.navigationController.pushViewController(myController, animated: true)
我在 TabBar 中有一个 TableViewController。 当我 select 我的 tableView 的一个单元格时,我想用 pushViewController(MyNewController) 启动一个新控制器。
这是我的代码:
在我的 TableView 中:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
UINavigationController().pushViewController(myController, animated: true)
}
在我的标签栏中:
func viewDidLoad() {
super.viewDidLoad()
var controllerArray: [UIViewController] = []
let controller: UIViewController = ClubPreviewListViewController()
controller.title = "TEST"
controllerArray.append(controller)
self.view.addSubview(pageMenu!.view)
}
(我使用CAPSPageMenu来定制我的TabBar,但这不是问题,没有我也有同样的问题)
在我的控制器中:
deinit {
print ("TEST")
}
当我 select 一个单元格时,日志写 "TEST" 每次我 select 但不改变视图。
我认为是我的 navigationController 出了问题,但我不知道如何解决。
在我实现 TabBar 之前,我单独使用我的 TableView,推送确实有效。
对不起我的英语!感谢您的帮助。
编辑:
我更改了我的 pushViewController :
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
//UINavigationController().pushViewController(myController, animated: true)
self.navigationController?.pushViewController(myController, animated: true)
}
同样的反应。
我的 NavigationController 不直接 link 与我的 TabBar。我需要创建另一个吗?我不太明白 NavigationController 是如何工作的!
编辑2:
如果我使用 TabBar 的导航控制器而不是 TableView 的导航控制器,视图会发生变化!
self.saveTabBarNavigationController.pushViewController(myController, animated: true)
试试这个,只有当你有导航嵌入式标签栏控制器时它才会起作用
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
myController.parameter = self.tableau[indexPath.row]
navigationController.pushViewController(myController, animated: true)
}
您正在创建一个导航控制器的实例在线
UINavigationController().pushViewController(myController, animated: true)
一旦此方法执行完毕,导航控制器及其视图控制器将被释放,因为没有任何内容保留您的导航控制器。导致 'TEST' 在您的 deinit()
函数中打印。
您应该获取拥有当前选项卡栏控制器的导航控制器并使用它推入堆栈。如果不知道你的应用程序的结构,就很难知道你的导航控制器在哪里(如果它存在的话)。
检查你的故事板,但基本上尝试:
self.navigationController.pushViewController(myController, animated: true)