2017-11-08 11 views
0

私はiOS開発が初めてで、多くのアプリケーションのように左メニューバーを作っています。私は一点に着いたが、今私は立ち往生している。助けてください。UIViewからUIViewControllerをプッシュする方法

クラス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 
    } 
} 

それぞれのView Controllerでメニューを表示するためにLeftMenuを使用します。

私がしたいのは、tableViewのセルが選択されているときに対応するView Controllerを開くことです。助けてください。

+0

対応するView Controllerはどこですか?ストーリーボードで?ストーリーボードで 'segue'を定義しましたか? – Bilal

+0

質問と無関係の注釈。その 'didSelectRowAt'メソッドを最適化するには、menuItemsオブジェクトを文字列に割り当てて、その上に切り替えます。将来への幸運: – royalmurder

+0

@Bilal私はストーリーボードを使用していません。私はプログラム的にインターフェイスを作っています。 –

答えて

2

LeftMenuビューのデリゲートプロトコルを作成し、LeftMenuを表示しているビューコントローラにそのプロトコルを実装させると、新しいView Controllerをプッシュする責任があります。

その後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) 
      ... 
     } 
    } 
    ... 
} 

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ビューを含め、すべてのビューコントローラのためにこれを行い、基本クラスを作成することができますしたがって、この実装を2回以上持つ必要はありません。

+0

修正は何ですか? –

+0

それは私のために働かなかった。 –

+0

LeftMenuを作成するView Controllerで何をすべきかを明確にするために答えを編集しました。あなたが理解していないものがいくつかある場合は教えてください – Sune

関連する問題