質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

2040閲覧

UITabbarControllerにモーダル表示するボタンを追加

yamataku29

総合スコア51

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/03/05 07:24

編集2017/03/05 08:24

UITabbarControllerの中でtabbaritemを5つ作成し、左から3番目の真ん中のtabbaritemの上にsubviewを載せてボタン化して、それを押したらViewControllerをモーダル表示する。

というのを下記の記事を参考に試しているのですが、なかなか上手く行かず、、
小ネタ:UITabBarControllerに「モーダル表示するボタン」を追加する(Swift)

↑の記事のコードをswift3に適用させつつ実装しており、エラーなどは一通り修正したのですが、tabbarの上に載せたsubviewの出現と、指定したViewControllerのモーダル表示ができず、苦戦しています。

原因分かる方いらっしゃればアドバイス貰えるとうれしいです。
よろしくお願いします。

import UIKit class MainTabBarViewController: UITabBarController { let modalButton: UIButton = UIButton() override func viewDidLoad() { super.viewDidLoad() // PostViewをModal表示させる let image = UIImage(named: "modalButton") self.modalButton.setBackgroundImage(image, for: .normal) self.modalButton.addTarget(self, action: "openModal", for: UIControlEvents.touchUpInside) self.tabBar.addSubview(self.modalButton) var viewControllerArray = [UIViewController]() //1つ目のtab let currentInfoStoryboard = UIStoryboard(name: "CurrentInfoStoryboard", bundle: nil) guard let currentInfoNavigationViewController = currentInfoStoryboard.instantiateInitialViewController() else { // FIXME: send error report return } viewControllerArray.append(currentInfoNavigationViewController) //2つ目のtab let monthlyTabBarStoryboard = UIStoryboard (name: "MonthlyGraph", bundle: nil ) guard let monthlyGraph = monthlyTabBarStoryboard.instantiateInitialViewController() else { return } viewControllerArray.append(monthlyGraph) //3つ目のtab let postStoryboard = UIStoryboard(name: "PostStoryboard", bundle: nil) guard let postViewController = postStoryboard.instantiateInitialViewController() else { // FIXME: send error report return } viewControllerArray.append(postViewController) //4つ目のtab let appinfostoryboard = UIStoryboard(name: "AppInfo", bundle: nil) guard let appInfoViewController = appinfostoryboard.instantiateInitialViewController() else { return } viewControllerArray.append(appInfoViewController) //5つ目のtab let profileStoryboard = UIStoryboard(name: "ProfileStoryboard", bundle: nil) guard let profileViewController = profileStoryboard.instantiateInitialViewController() else { // FIXME: send error report return } viewControllerArray.append(profileViewController) self.viewControllers = viewControllerArray } //subviewのレイアウト指定 override func viewDidLayoutSubviews() { let v = self.tabBarButtons()?[2] if let v = v { self.modalButton.frame = v.frame } //モーダル表示の関数 func openModal() { let vc = (self.storyboard?.instantiateViewController(withIdentifier: "PostStoryboard"))! as UIViewController? if let vc = vc { self.present(vc, animated: true, completion: nil) } } } extension UITabBarController { func tabBarButtons() -> [UIView]? { return self.tabBar.subviews.reduce([], {(ret: [UIView], item:AnyObject) -> [UIView] in if let v = item as? UIView { if v.isKind(of: NSClassFromString("UITabBarButton")!) { return ret + [v] } } return ret }) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問