Не могу сделать переход в боковом меню - PullRequest
0 голосов
/ 24 января 2019

Я использую этот модуль бокового меню, и я не могу сделать переход из этого меню.На моем Storyboard у меня есть (начальный) ViewController (MainViewController), NavigationController с RootController и снова ViewController (GameController):

Storyboard

Я создал Segue из RootController дляGameController и установите Идентификатор: «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
        }
    }

И ничего не произошло:

Example

Я не могу понять, почему это не работает, для предыдущих проектов (без бокового меню) этот путь был идеальным, но теперь у меня есть проблемы.Пожалуйста, помогите.

Подробности:

details

Код RootController:

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
        }
    }
}

Код меню Menu:

import UIKit

class MenuTableViewCell: UITableViewCell {

    @IBOutlet weak var menuTitle: UILabel!

    func updateCell(title: String) {
        menuTitle.text = title
    }
}

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Попробуйте использовать push вместо 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 означает имя любого контроллера: например, если вы нажимаете 2-й контроллер, то вместо этого (AnyOutof3Controllers) вы должны использовать 2ndViewControll

0 голосов
/ 24 января 2019

Я нашел решение здесь .

Быстрый ответ:

Раскадровка должна выглядеть как «Nav Controller -> [Main View Controller] -> (модальный) Side Menu Nav Controller -> (отношение контроллера embed / root view) Table View Controller (с опциями меню) -> (push) другие контроллеры вида "

example

Спасибо за помощь @ Абхишек Джадхав Ваш код работает отлично!

0 голосов
/ 24 января 2019

Эта демонстрация поможет вам достичь: -

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)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...