スライドメニュー欲しくて
iOS-Slide-Menuっての試したけどObjective-cだとうまくいったんだけど、Swiftだとうまくいかないから
SWRevealViewControllerっていうのを試して見たらうまくいったので使い方まとめ。
基本的にはチュートリアル通りにやればいいかなと
“SWRevealViewControllerSetSegue”
ってなってる部分はSWRevealViewControllerSegueSetController
です。
podsでuse_frameworks!を書いてインストールする場合は、以前書いた通りimport SWRevealViewController
で見つかるようになります。
大雑把にですが以下説明
①ViewControllerを追加
追加したストーリーボード
ClassにSWRevealViewController
を設定
②NavigationControllerとViewControllerのセットを作成
NavigationControllerにボタンを表示するのでNavigationControllerは必要です。
それに紐づく.swiftも作成。
各ビューにメニューボタンも自分で置く
③メニュー用のViewControllerを作成
今回のサンプルは固定メニューのためにstatic Cellsを設定したいのでTableViewControllerを使ってます。
④SWRevealViewControllerとメニューのひも付け
右クリックでピーって引っ張ってCustomを選択して
Identifierにsw_rear
classにSWRevealViewControllerSegueSetController
を設定。これがサイドメニューの設定
⑤各画面をつなぐ
初期画面はSWRevealViewControllerからreveal view controller set controller
を選択して
追加でIdentifierにsw_front
を設定
他の2画面と初期画面をTableViewのCellからreveal view controller push controller
で各々つなぐ
⑥ViewController.swiftの編集
メニューボタンをmenuButton
で設定して
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
ッて感じで動く!
#追記
メイン画面タップで閉じるようにする場合は
let revealController = self.revealViewController()
revealController.tapGestureRecognizer()
を足せばいいみたい。
#さらなる追記
コードで遷移する場合は
let storyboard:UIStoryboard = UIStoryboard.init(name: "CardListViewController", bundle: NSBundle.mainBundle())
let cardListViewcontroller:CardListViewController = storyboard.instantiateInitialViewController()! as! CardListViewController
cardListViewcontroller.typeName = types[indexPath.row]
let navigationController = UINavigationController(rootViewController: cardListViewcontroller)
let revealController = self.revealViewController()
revealController.pushFrontViewController(navigationController, animated: true)
ッて感じで
ViewController作成
↓
NavigationController作成
↓
revealViewControllerにpushとやるみたい