如何从UIView推送UIViewController

时间:2017-11-08 10:00:43

标签: ios swift uiview uiviewcontroller

我是iOS开发的新手,我正在制作一个像许多应用程序一样的左侧菜单栏。我得到了一点,但现在我被卡住了。请帮忙。

我有一个名为LeftMenu的类,它声明如下:

类LeftMenu:UIView,UITableViewDelegate,UITableViewDataSource {

原因是我在多个UIViewControllers中使用相同的LeftMenu

有一个表示scrollMenu的tableView,我正在观察所选的行:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch self.menuItems[indexPath.row] {
    case "Wever":
        print(self.menuItems[indexPath.row])
    case "Payments":
        print(self.menuItems[indexPath.row])
    case "Profile":
        print(self.menuItems[indexPath.row])
    case "Trip History":
        print(self.menuItems[indexPath.row])
    case "Referral":
        print(self.menuItems[indexPath.row])
    case "Help":
        print(self.menuItems[indexPath.row])
    case "Settings":
        print(self.menuItems[indexPath.row])
    case "About":
        print(self.menuItems[indexPath.row])
    default:
        break
    }
}

我使用LeftMenu在每个视图控制器中调出菜单。

我想要做的是在选择tableView中的单元格时打开相应的视图控制器。请帮忙。

1 个答案:

答案 0 :(得分:2)

您可以为LeftMenu视图创建委托协议,并让任何显示LeftMenu的视图控制器实现该协议,因此他们负责推送新的视图控制器。

在LeftMenu.swift中

protocol LeftMenuDelegate: class {
    func leftMenuDidSelectViewController(_ viewController: UIViewController)
}

class LeftMenu: UIView, UITableViewDelegate, UITableViewDataSource {
    public weak var delegate: LeftMenuDelegate?
    ...

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch self.menuItems[indexPath.row] {
        case "Wever":
            let viewController = WeverViewController() // or whatever it is named
            self.delegate?.leftMenuDidSelectViewController(viewController)
            ...
        }
    }
    ...
}

然后在显示LeftMenu的所有视图控制器中:

class SomeViewController: UIViewController, LeftMenuDelegate {
    ...
    // wherever you create you left menu, do this
    let leftMenu = LeftMenu()
    leftMenu.delegate = self
    ...

    // Add this method to be called from LeftMenu through the delegate protocol
    func leftMenuDidSelectViewController(_ viewController: UIViewController) {
        self.navigationController?.pushViewController(viewController, animated: true)
    }

您可以为包含LeftMenu视图的所有视图控制器创建一个基类,这样您就不必多次执行此实现。