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

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

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

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

Q&A

解決済

1回答

1407閲覧

Swift viewControllerが1つの場合のページング方法

torkia

総合スコア24

Swift

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

0グッド

0クリップ

投稿2018/02/12 15:14

Swift3にて、tableViewのセルをタップして、セルのindex番号に応じた内容を表示させるviewControllerをスワイプで表示切り替えさせたいのですが、その方法があれば教えて頂きたいです。

表示されるテキスト内容はcsvファイルからの読み込みなので、各ページ違うのですが、レイアウトパターンが同じなので1つのviewControllerで完成しているのですが、この場合のページング方法が分からないので、現在は複数のviewcontrollerに同じ内容のコードをコピペしてpageViewControllerでページングさせています。viewControllerを1つにできればすっきりすると思うのですが、どういった方法があるでしょうか?

宜しくお願い致します。

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

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

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

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

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

fuzzball

2018/02/13 01:18

インスタンスを複数作ればいいだけの話では?コピペしているコードというのは全く同じなんですよね?
torkia

2018/02/13 03:34

追記ありがとうございます。コピペしているコードは同じです。
fuzzball

2018/02/13 03:52

ならインスタンスを複数作ればいいです。Storyboard使っているなら、全て同じカスタムクラスにすればいいです。
torkia

2018/02/13 04:38

追記ありがとうございます。こちらの勉強不足で申し訳ないのですが、「全て同じカスタムクラスにすれば」の意味と方法が分かりません。インスタンスを複数作るというのはfor_in文などで作ることでしょうか?
guest

回答1

0

自己解決

PageViewController.swiftファイルでコンテンツ用のViewControllerを複数作成して、コンテンツ用のレイアウトは別のViewController(1つ)のファイルに記述し、CSVファイルを遷移したページのindexで呼出すようにすることで解決しました。
使用した部品は、NavigationController, 既存ViewController, PageViewController, Viewcontrollerを1つ(コンテンツ用)

コードはざっくりこんな感じ。

class PageViewController: UIPageViewController, UIPageViewControllerDataSource { var selectedCell:Int = 0 // 遷移元から渡される値 var cellCount = 0 // 遷移元から渡される値 var contentVCs:[UIViewController] = [] override func viewDidLoad() { super.viewDidLoad() dataSource = self // コンテンツとなるViewControllerを遷移元のセルの数だけ作成 for index in 0..<cellCount { let contentVC = storyboard?.instantiateViewController(withIdentifier: "PageContentViewController") as! PageContentViewController contentVC.pageIndex = index contentVCs.append(contentVC) } // タップされたセルのindexからコンテンツページを呼出し self.setViewControllers([contentVCs[selectedCell]], direction: .forward, animated: true, completion: nil) } (略) } class PageContentViewController: UIViewController { var pageIndex:Int = 0 var csvArray:[String] = [] var currentArray:[String] = [] override func viewDidLoad() { super.viewDidLoad() // CSVデータを表示ページのindexに応じて取得し、配列に格納 csvArray = loadCSV("test") currentArray = csvArray[pageIndex].components(separatedBy: ";") currentArray = currentArray.filter {$0 != ""} // ラベル作成 for index in 0..<currentArray.count { let label = UILabel() label.frame = CGRect(x:20, y:100+(30*index), width:100, height:30) label.text = currentArray[index] // ここでCSVデータの入った配列を使用 self.view.addSubview(label) } } (略) }

投稿2019/07/21 06:46

編集2019/07/21 15:26
torkia

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問