Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';Don’别在侧边菜单上划一段_Ios_Swift_Uikit - Fatal编程技术网

Ios Can';Don’别在侧边菜单上划一段

Ios Can';Don’别在侧边菜单上划一段,ios,swift,uikit,Ios,Swift,Uikit,我用的是侧菜单盒,我无法从这个菜单中切换。在我的故事板上,我有(初始)ViewController(MainViewController)、带有RootController的NavigationController和ViewController(GameController): 我创建了从RootController到GameController的Segue,并安装了标识符:“ShowGame”,然后为Segue编写了一些代码: override func tableView(_ table

我用的是侧菜单盒,我无法从这个菜单中切换。在我的故事板上,我有(初始)ViewController(MainViewController)、带有RootController的NavigationController和ViewController(GameController):

我创建了从RootController到GameController的Segue,并安装了标识符:“ShowGame”,然后为Segue编写了一些代码:

 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一样。可能是我没有在故事板上做一些细节。谢谢,但我找到了解决方案。我会贴出来的。