簡體   English   中英

如何從UIView推送UIViewController

[英]How to push a UIViewController from a UIView

我是iOS開發的新手,並且正在像許多應用程序一樣制作一個左菜單欄。 我說到了要點,但現在我被困住了。 請幫忙。

我有一個名為LeftMenu的類,它聲明如下:

類LeftMenu:UIView,UITableViewDelegate,UITableViewDataSource {

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

有一個tableView代表scrollMenu,我正在觀察選定的行,如下所示:

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中的一個單元格被選中時打開相應的視圖控制器。 請幫忙。

您可以為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視圖的視圖控制器執行此操作,因此您不必多次執行此實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM