【現在作成中のアプリの概要】
現在、タブ付きのTODOリストを作成しています。
タブの生成はライブラリのXLPagerTabStripを使用しています。
添付ファイル中のタブ1(book1)とタブ2(book2)は常に表示させており、
Viewの右上にある+ボタンを押すと新規のタブ(book3)が増える仕組みになっています。
タブの追加は下記に記載のMainViewControllerで管理しています。
【現在詰まっている箇所】
追加したタブを削除するボタンをViewの右上に設置。
このボタンを押すと追加したタブを削除できるようにしたいのですが、実装できません。
マイナスボタンは下記コードのremoveTab()と接続しています。
上記の実装を可能にする方法を知っている方がいらっしゃいましたら、ご教授の程よろしくお願い致します。
swift
1 2import UIKit 3import XLPagerTabStrip 4import RealmSwift 5 6class MainViewController: ButtonBarPagerTabStripViewController { 7 // 追加する ViewController 8 var newVC: UIViewController? 9 10 11 //なんかよく分からないから取りあえず消しとく 12// private var realm: Realm! 13 //Realmから受け取るデータを突っ込む変数を準備 14 private var tabList: Results<tabModel>! 15// var ison: Bool! 16 //Realmから受け取るデータを突っ込む変数を準備 17// private var ison: Results<isVC3>! 18 19 var number = 0 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 // タブの背景色 24 settings.style.buttonBarBackgroundColor = UIColor.lightGray 25 // タブの色 26 settings.style.buttonBarItemBackgroundColor = UIColor.lightGray 27 // タブの文字サイズ 28 settings.style.buttonBarItemFont = UIFont.systemFont(ofSize: 15) 29 // カーソルの色 30 buttonBarView.selectedBar.backgroundColor = UIColor.darkGray 31 32 print(number,"現時点での値") 33 34 } 35 36 37 //タブ追加のメソッド 38 override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { 39 // 現時点で登録されている ViewController をコピー(viewControllers は get only) 40 var vcs = self.viewControllers 41 42 // まだ何も登録されていない場合 43 if vcs.isEmpty { 44 // 初期設定の ViewController を追加 45 let table1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table") as! ViewController 46 table1.noteBookName = "book1" 47// table1.view.backgroundColor = .red 48 vcs.append(table1) 49 50 //ThirdViewControllerをインスタンス化する 51 let table2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table2") as! SecondViewController 52 table2.noteBookName = "book2" 53// table2.view.backgroundColor = .yellow 54 vcs.append(table2) 55 56 //以下のコードを入力すると、再起動後に最新の数字が表示される 57 let realm = try! Realm() 58 let obj = realm.objects(isVC3.self) 59 60 61 62 63 for objData in obj{ 64 65 print(objData.isOnVC,"realmに保存されている値") 66 number = objData.isOnVC 67 } 68 69 if number > 0 { 70 //SecondViewControllerをインスタンス化する 71 let table3 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table3") as! ThirdViewController 72 table3.noteBookName = "book3" 73 vcs.append(table3) 74 } 75 76 } 77 78 // 追加する ViewController がある場合 79 if let addvc = newVC { 80 // 追加する 81 vcs.append(addvc) 82 83 // 追加に利用した newVC は nil に戻す 84 newVC = nil 85 } 86 87 return vcs 88 } 89 90 //タブを追加するボタン 91 @IBAction func addTab(_ sender: Any) { 92 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table3") as! ThirdViewController 93 vc.noteBookName = "book3" 94// vc.view.backgroundColor = .green 95 96 // newVC に追加したい ViewController を登録する 97 newVC = vc 98 99 let obj = isVC3() 100 print(obj.isOnVC,"追加前の値") 101 102 print(number,"追加中の値") 103 number += 1 104 105 obj.isOnVC = number 106 print(obj.isOnVC,"追加後の値") 107 108 109 let realm = try! Realm() 110 111 try! realm.write { 112 realm.add(obj) 113 //print(obj.numbers) 114 } 115 116 //タブを動的に追加するなど、表示を更新するメソッド(追加したタブを表示するメソッド) 117 reloadPagerTabStripView() 118 } 119 120 @IBAction func removeTab(_ sender: Any) { 121 let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "notebook_table3") as! ThirdViewController 122 vc.noteBookName = "book3" 123 vc.hidesBottomBarWhenPushed = true 124 125 let obj = isVC3() 126 127 number -= 1 128 129 obj.isOnVC = number 130 131 let realm = try! Realm() 132 133 try! realm.write { 134 realm.add(obj) 135 //print(obj.numbers) 136 } 137 //タブを動的に追加するなど、表示を更新するメソッド(追加したタブを表示するメソッド) 138 reloadPagerTabStripView() 139 } 140} 141 142
removeTab では storyboard から新しいタブを読み込む必要はなく、newVc を nil にして reloadPagerTabStripView を呼べばいいと思いますが、そもそもの作りがいまいちな気が…。
回答1件
あなたの回答
tips
プレビュー