ios - 如何从 UIView 推送 UIViewController

标签 ios swift uiview uiviewcontroller

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

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

LeftMenu 类:UIView、UITableViewDelegate、UITableViewDataSource {

原因是我在多个 UIViewController 中使用相同的 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 在每个 View Controller 中调出菜单。

我想做的是当 tableView 中的一个单元格被选中时打开相应的 View Controller 。请帮忙。

最佳答案

您可以为 LeftMenu View 创建一个委托(delegate)协议(protocol),并让任何显示 LeftMenu 的 View Controller 实现该协议(protocol),这样它们就负责推送新的 View Controller 。

在 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 的 View Controller 中:

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 View 的 View Controller 执行此操作,因此您不必多次执行此实现。

关于ios - 如何从 UIView 推送 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176628/

相关文章:

ios - 为什么当我添加注释时我的 map View 会放大?

swift - 尝试从核心数据加载时在 swift 中发现 nil

ios - 检测 UIPanGestureRecognizer 开始和结束的 UIView 网格方 block

iphone - 在 iphone 中只显示一次弹出窗口?

iphone - 通话中状态栏 HIG 指南问题

ios - 需要从 URL 设置图像而不会有任何闪烁。阅读描述以了解完整的场景

swift - 将 Any 转换为 Optional

ios - 每次显示 UIViewController 时调用一个方法

iphone - 倒计时 UILabel 不会递减

ios - 单击表格 View 单元格时转到另一个 View