【swift】uitabbarにポップオーバーするメニューを表示する方法
はじめに
また、ちょっと需要なさそうな内容なのですがやりたかったことは以下のような形です。uitabbarのタブをクリックすると画面遷移するのではなくて、ポップオーバーでメニューを表示するということ
実装方法
ポイントは
1. UITabBarControllerDelegateのshouldSelectViewControllerを実装
2. UIPopoverPresentationControllerDelegateのadaptivePresentationStyleForPresentationControllerを実装
1はタブを選択された時の処理を記述します。ここで真ん中のセルだったらポップオーバーを表示する処理を記述します。
2は実際にポップオーバーを表示する処理
class TabBarController: UITabBarController, UITabBarControllerDelegate, UIPopoverPresentationControllerDelegate { var firstViewController: UIViewController! var secondViewController: UIViewController! var thirdViewController: UIViewController! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. firstViewController = UIViewController() secondViewController = UIViewController() thirdViewController = UIViewController() firstViewController.view.backgroundColor = UIColor.whiteColor() secondViewController.view.backgroundColor = UIColor.whiteColor() thirdViewController.view.backgroundColor = UIColor.whiteColor() var tabbarItem: UITabBarItem = UITabBarItem(title: "タブ1", image: UIImage(named: "bookmark"), tag: 0) var tabbarItem2: UITabBarItem = UITabBarItem(title: "タブ2", image: UIImage(named: "bar"), tag: 1) var tabbarItem3: UITabBarItem = UITabBarItem(title: "タブ3", image: UIImage(named: "group"), tag: 2) firstViewController.tabBarItem = tabbarItem secondViewController.tabBarItem = tabbarItem2 thirdViewController.tabBarItem = tabbarItem3 var tabs = NSArray(objects: firstViewController!, secondViewController!, thirdViewController!) self.setViewControllers(tabs as [AnyObject], animated: false) self.delegate = self } func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { // どのタブが選択されたかを判定します if viewController == self.secondViewController { var widthPopover: CGFloat = self.view.frame.width var heightPopover: CGFloat = 300 var heightTabbar: CGFloat = 50 // ポップオーバーさせるviewcontrollerを生成します var popoverViewController: UIViewController = UIViewController() var label = UILabel(frame: CGRectMake(0, 100, widthPopover, 100)) label.text = "ここにメニューとかをおきます" label.textAlignment = NSTextAlignment.Center popoverViewController.view.addSubview(label) popoverViewController.view.frame = CGRectMake(0, 0, widthPopover, heightPopover) popoverViewController.modalPresentationStyle = .Popover popoverViewController.preferredContentSize = popoverViewController.view.frame.size if let presentationController = popoverViewController.popoverPresentationController { presentationController.permittedArrowDirections = .Down presentationController.sourceView = self.view presentationController.sourceRect = CGRectMake(self.view.frame.width/2 - widthPopover/2, self.view.frame.height - heightTabbar, widthPopover, heightPopover) presentationController.delegate = self } presentViewController(popoverViewController, animated: true, completion: nil) return false } else { return true } } func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return .None } }
完成画面だけみるとシンプルなんですけど、コードにするとけっこう長くなりますね、、、
以上です