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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1053閲覧

XLPagerTabStripでタブを追加するボタンを導入したい

tyu

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/01/24 06:47

編集2021/01/26 16:20

XLPagerTabStripというライブラリを使用して、現在作成中のアプリにタブを導入しようとしています。
タブの実装は実施できたのですが、タブを追加するボタンの実装ができません。
下記のサイトを参照すると、reloadPagerTabStripView()を活用すると良いとのことですが、どのようにコーディングしたら良いか分かりません。

どなたかXLPagerTabStripにお詳しい方がいらっしゃいましたら、御教授の程お願いいたします。参考サイト

swift

1 2import UIKit 3import XLPagerTabStrip 4 5class NotebookViewController: ButtonBarPagerTabStripViewController { 6 7 override func viewDidLoad() { 8 // タブの背景色 9 settings.style.buttonBarBackgroundColor = UIColor.lightGray 10 // タブの色 11 settings.style.buttonBarItemBackgroundColor = UIColor.lightGray 12 // タブの文字サイズ 13 settings.style.buttonBarItemFont = UIFont.systemFont(ofSize: 15) 14 // カーソルの色 15 buttonBarView.selectedBar.backgroundColor = UIColor.darkGray 16 super.viewDidLoad() 17 18 // Do any additional setup after loading the view. 19 } 20 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { 21 var vcs: [UIViewController] = [] 22 let table1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! NotebookTableViewController 23 table1.noteBookName = "Notebook1" 24 vcs.append(table1) 25 let table2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! NotebookTableViewController 26 table2.noteBookName = "Notebook2" 27 vcs.append(table2) 28 return vcs 29 } 30//タブを追加するボタン 31 @IBAction func addTab(_ sender: Any) { 32 reloadPagerTabStripView() 33 } 34 35 36} 37

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

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

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

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

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

guest

回答1

0

ベストアンサー

考え方は UITableView などの reloadData() と同じなのですが、viewControllers(for:)viewDidLoad() よりも先に呼び出されるようなので、少し工夫が必要になりそうです。

基本的な流れは下記のような感じになると思いますが、このままだとボタンを押すたびにいくらでも ViewController を追加できてしまうため、その辺りの制限は少し工夫する必要がありそうです。

Swift

1class NotebookViewController: ButtonBarPagerTabStripViewController { 2 // 追加する ViewController 3 var newVC: UIViewController? 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // タブの背景色 8 settings.style.buttonBarBackgroundColor = UIColor.lightGray 9 // タブの色 10 settings.style.buttonBarItemBackgroundColor = UIColor.lightGray 11 // タブの文字サイズ 12 settings.style.buttonBarItemFont = UIFont.systemFont(ofSize: 15) 13 // カーソルの色 14 buttonBarView.selectedBar.backgroundColor = UIColor.darkGray 15 } 16 17 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { 18 // 現時点で登録されている ViewController をコピー(viewControllers は get only) 19 var vcs = self.viewControllers 20 21 // まだ何も登録されていない場合 22 if vcs.isEmpty { 23 // 初期設定の ViewController を追加 24 let table1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! NotebookTableViewController 25 table1.noteBookName = "book1" 26 table1.view.backgroundColor = .red 27 vcs.append(table1) 28 29 let table2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! NotebookTableViewController 30 table2.noteBookName = "book2" 31 table2.view.backgroundColor = .yellow 32 vcs.append(table2) 33 } 34 35 // 追加する ViewController がある場合 36 if let addvc = newVC { 37 // 追加する 38 vcs.append(addvc) 39 40 // 追加に利用した newVC は nil に戻す 41 newVC = nil 42 } 43 44 return vcs 45 } 46 47 //タブを追加するボタン 48 @IBAction func addTab(_ sender: Any) { 49 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! NotebookTableViewController 50 vc.noteBookName = "book3" 51 vc.view.backgroundColor = .green 52 53 // newVC に追加したい ViewController を登録する 54 newVC = vc 55 56 reloadPagerTabStripView() 57 } 58}

投稿2021/01/25 07:43

TsukubaDepot

総合スコア5086

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

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

tyu

2021/01/26 16:24

ご回答いただきありがとうございます。 上記内容の通りコーディングした結果、望んでいた機能を実装することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問