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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

Xcode

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

Swift

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

Q&A

解決済

1回答

1127閲覧

[iOS][swift]タブ切り替えページで画面情報を更新したい

entaro12345

総合スコア75

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/01/22 06:12

前提・実現したいこと

iOSアプリをswift言語で実装しています。
タブで切り替えるページを実装しているのですが、
そのページがメイン画面となり、定期的(15秒ごと)に表示内容を更新しなくてはいけないのですが、
その方法がわからないため、ご教示お願いします。
タブ切り替えには、PageMenuライブラリを使用しています。
2つのコントロールを使用していることが原因なのかもしれないのですが、
その場合は1つのコントロールでの実装方法をご教示いただければ幸いです。

該当のソースコード

FirstView

1class MainViewController: UIViewController { 2 3 var pageMenu : CAPSPageMenu? 4 var dispatch = DispatchGroup() 5 6 var controllerArray : [UIViewController] = [] 7 var viewSecond : SecondViewContllor! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 } 12 13 override func viewDidAppear(_ animated: Bool) { 14 // 一部省略 15 if let url = URL(string: urlString!) { 16 let req = NSMutableURLRequest(url: url) 17 self.dispatch = DispatchGroup() 18 self.dispatch.enter() 19 req.httpMethod = "POST" 20 req.httpBody = data 21 let task = URLSession.shared.dataTask(with: req as URLRequest, completionHandler: { (data, resp, err) in 22 do { 23 // APIから情報取得処理 24 aData = APIから取得データ 25 26 // タブ名(建物名)をセット 27 for data in aData! { 28 let sData = data["test"] 29 self.aBuildingTitle.append(sBuildingName!) 30 self.viewSecond = SecondViewController() 31 // タブ名をセット 32 self.viewSecond.title = sBuildingName 33 // データをセット 34 self.viewSecond.aData = filteredData 35 36 self.controllerArray.append(self.viewSecond) 37 } 38 } 39 40 // PageMenuの設定 41 let parameters: [CAPSPageMenuOption] = [ 42 .bottomMenuHairlineColor(CustomClass.CustomUIColor().basicGreen()), 43 .centerMenuItems(true), 44 .menuItemFont(UIFont.systemFont(ofSize: 14)), 45 .menuItemSeparatorWidth(4.3), 46 .menuItemSeparatorPercentageHeight(0.1), 47 .menuItemWidthBasedOnTitleTextWidth(true), 48 .selectedMenuItemLabelColor(CustomClass.CustomUIColor().basicGreen()), 49 .selectionIndicatorColor(CustomClass.CustomUIColor().basicGreen()), 50 .unselectedMenuItemLabelColor(UIColor.white) 51 ] 52 53 // PageMenuのビューのサイズを設定 54 self.pageMenu = CAPSPageMenu(viewControllers: self.controllerArray, frame: CGRect(x:0, y:70, width:self.view.frame.width, height:self.view.frame.height * 0.86), pageMenuOptions: parameters) 55 self.pageMenu?.delegate = nil 56 // PageMenuのビューを親のビューに追加 57 self.view.addSubview(self.pageMenu!.view) 58 // PageMenuのビューをToolbarの後ろへ移動 59 self.view.sendSubviewToBack(self.pageMenu!.view) 60 self.pageMenu!.didMove(toParent: self) 61 62 self.dispatch.leave() 63 } 64 }) 65 task.resume() 66 } 67 68 dispatch.notify(queue: .main) { 69 self.activityIndicator.stopAnimating() 70 } 71 }

SecondView

1class SecondViewController: UIViewController { 2 3 var dispatch = DispatchGroup() 4 5 var activityIndicator: UIActivityIndicatorView! 6 var scrollView:MyScrollView! 7 8 var aData:[Any]! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 // ぐるぐるを表示 14 activityIndicator = UIActivityIndicatorView() 15 activityIndicator.color = UIColor.gray 16 activityIndicator.transform = CGAffineTransform(scaleX: 5, y: 5) 17 activityIndicator.frame = CGRect(x: 0, y: self.view.frame.height * 0.7, width: self.view.frame.width, height: 100) 18 activityIndicator.hidesWhenStopped = true 19 self.view.addSubview(activityIndicator) 20 activityIndicator.startAnimating() 21 22 dispatch.enter() 23 24 for i in 0..<self.aData.count { 25 // aDataの情報で各コントロールをセット 26 ※セット処理は省略 27 scrollView.addSubview(vw) 28 self.view.addSubview(scrollView) 29 30 } 31 dispatch.leave() 32 } 33 34 override func viewDidAppear(_ animated: Bool) { 35 dispatch.notify(queue: .main) { 36 self.activityIndicator.stopAnimating() 37 } 38 } 39

試したこと

・画面のリロード
・Timerによる定期実行

補足情報(FW/ツールのバージョンなど)

MacOS HighSierra
Swift 3
Xcode 10.1

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

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

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

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

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

t_obara

2020/01/22 10:14

課題がよく把握できなかったのですが、「定期的(15秒ごと)に表示内容を更新」したいということで良いのですか?その場合、タイマーなどはご検討されたのでしょうか?
entaro12345

2020/01/22 10:27

投稿ありがとうございます。 はい、Timerは使用してみましたが、各タブの中身が更新されませんでした。 →一つのタブ内に全データを表示しようとした形跡があり、  レイアウトが崩れたりして思い通りの動作ができませんでした。
guest

回答1

0

自己解決

自己解決しました。

ViewControllerを分けて実装していましたが、CAPSPageMenuライブラリを使用することも諦め、
一つのViewControllerで完結させる実装にすることにしました。

ご協力いただきましたみなさまに感謝いたします。

投稿2020/02/03 23:39

entaro12345

総合スコア75

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問