Ios Can';Don’别在侧边菜单上划一段
我用的是侧菜单盒,我无法从这个菜单中切换。在我的故事板上,我有(初始)ViewController(MainViewController)、带有RootController的NavigationController和ViewController(GameController): 我创建了从RootController到GameController的Segue,并安装了标识符:“ShowGame”,然后为Segue编写了一些代码:Ios Can';Don’别在侧边菜单上划一段,ios,swift,uikit,Ios,Swift,Uikit,我用的是侧菜单盒,我无法从这个菜单中切换。在我的故事板上,我有(初始)ViewController(MainViewController)、带有RootController的NavigationController和ViewController(GameController): 我创建了从RootController到GameController的Segue,并安装了标识符:“ShowGame”,然后为Segue编写了一些代码: override func tableView(_ table
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
tableView.deselectRow(at: indexPath, animated: true)
break
case 1:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
case 2:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
default:
break
}
}
什么也没有发生:
我不明白为什么它不工作,对于以前的项目(没有侧菜单),这种方式是完美的,但现在我有麻烦了。请帮忙
详细信息:
import UIKit
class MenuViewController: UITableViewController, UINavigationControllerDelegate {
var webServer = GCDWebServer()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
self.navigationController?.delegate = self
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let menuCell = tableView.dequeueReusableCell(withIdentifier: "MenuCell") as? MenuTableViewCell
switch indexPath.row {
case 0:
menuCell?.updateCell(title: "Главная")
case 1:
menuCell?.updateCell(title: "Первая игра")
case 2:
menuCell?.updateCell(title: "Вторая игра")
default:
break
}
return menuCell!
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
tableView.deselectRow(at: indexPath, animated: true)
break
case 1:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
case 2:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
default:
break
}
}
}
import UIKit
class MenuTableViewCell: UITableViewCell {
@IBOutlet weak var menuTitle: UILabel!
func updateCell(title: String) {
menuTitle.text = title
}
}
根控制器代码:
import UIKit
class MenuViewController: UITableViewController, UINavigationControllerDelegate {
var webServer = GCDWebServer()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
self.navigationController?.delegate = self
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let menuCell = tableView.dequeueReusableCell(withIdentifier: "MenuCell") as? MenuTableViewCell
switch indexPath.row {
case 0:
menuCell?.updateCell(title: "Главная")
case 1:
menuCell?.updateCell(title: "Первая игра")
case 2:
menuCell?.updateCell(title: "Вторая игра")
default:
break
}
return menuCell!
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
tableView.deselectRow(at: indexPath, animated: true)
break
case 1:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
case 2:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
default:
break
}
}
}
import UIKit
class MenuTableViewCell: UITableViewCell {
@IBOutlet weak var menuTitle: UILabel!
func updateCell(title: String) {
menuTitle.text = title
}
}
菜单调用代码:
import UIKit
class MenuViewController: UITableViewController, UINavigationControllerDelegate {
var webServer = GCDWebServer()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
self.navigationController?.delegate = self
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let menuCell = tableView.dequeueReusableCell(withIdentifier: "MenuCell") as? MenuTableViewCell
switch indexPath.row {
case 0:
menuCell?.updateCell(title: "Главная")
case 1:
menuCell?.updateCell(title: "Первая игра")
case 2:
menuCell?.updateCell(title: "Вторая игра")
default:
break
}
return menuCell!
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
tableView.deselectRow(at: indexPath, animated: true)
break
case 1:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
case 2:
self.performSegue(withIdentifier: "ShowGame", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
default:
break
}
}
}
import UIKit
class MenuTableViewCell: UITableViewCell {
@IBOutlet weak var menuTitle: UILabel!
func updateCell(title: String) {
menuTitle.text = title
}
}
此演示将帮助您实现:-
class MenuViewController: UITableViewController {
var menus = ["Menu1", "Menu2", "Menu3"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menus.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell") as? MenuTableViewCell
cell.menuTitle?.text = menus[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
let firstMenuVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstMenuViewController") as! FirstMenuViewController
self.navigationController?.pushViewController(firstMenuVC, animated: true)
case 1:
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
self.navigationController?.pushViewController(secondVC, animated: true)
case 2:
let thirdVC = self.storyboard?.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
self.navigationController?.pushViewController(thirdVC, animated: true)
default:
break
}
tableView.deselectRow(at: indexPath, animated: true)
}
}
尝试使用推送而不是segue它看起来不错
let yourVcObject : AnyOutof3Controllers = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AnyIdentifier") as! YourVc
self.dismiss(animated: false) {
if let topController = UIApplication.topViewControllerForNav() as? UINavigationController {
topController.visibleViewController?.navigationController?.pushViewController(AnyOutof3Controllers)
AnyOutof3Controllers是指任何控制器的名称:例如,如果您单击第二个控制器,则必须使用第二个IEWControll来代替此控制器(AnyOutof3Controllers)
快速回答:
故事板必须看起来像“导航控制器->[主视图控制器]->(模式)侧菜单导航控制器->(嵌入/根视图控制器关系)表视图控制器(带菜单选项)->(推送)其他视图控制器”
感谢您的帮助@阿披谢克·贾达夫您的代码运行良好 ShowGame是一个标识符,它是
segue
?@iPeter RootController->GameViewControllerI刚刚实现的,它已经工作了,你能实现他们所说的所有过程吗@mrtishman放置一个断点,然后查看调用的是哪种情况。您是否可以将RootController代码上载到可以看到所有菜单的位置?如果您正确地完成了故事板部分,请按照SideMenu Github中的说明,并尝试使用此代码。因为我实现了它的可运行性,如果您想从零开始上传在侧菜单库中显示的步骤,我会上传它吗?不,我已经正确地完成了所有操作,但这段代码对我来说也不适用。我在新项目上测试了它。没有什么,和主题中的GIF一样。可能是我没有在故事板上做一些细节。谢谢,但我找到了解决方案。我会贴出来的。