viewControllerがあり、データが入っています。左または右にスワイプした後、同じUIを持ちながら異なるデータを持つ新しいビューコントローラーを作成します。これを行う最善の方法は何ですか? UIPageViewControllerを使用する必要がありますか?新しいデータでプログラムで左にスワイプしてViewControllerを作成する
0
A
答えて
1
スウィフト3の解決策は、プログラムでUIPageViewController
を設定することです。
あなたのUIPageViewController
にpages
と呼ばれるlazy array
と宣言するのが賢明です。
array
を使用してviewDidLoad
を使用すると、viewControllerを設定できます。また、dataSource
は、この配列で動作し、viewControllersを変更するロジックを処理できます。現在、dataSource
はカルーセルのようにviewControllerを連続的に表示するように実装されています。 )あなたのニーズに合わせて変更してください;
import Foundation
import UIKit
struct DisplayableData {
let title: String
let description: String
// etc...
}
class DataViewController: UIViewController {
var data: DisplayableData?
// You can add data as an initalizer parameter, depending on your design needs
init() {
// If you would create a xib for your DataViewController, than replace nib name with DataViewController to make it work
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class PageViewController: UIPageViewController {
lazy internal var pages: [DataViewController] = {
// If the UI is the same, reuse the viewController, no need to create multiple ones
// You could create a xib, and draw the UI there
let firstVC = DataViewController()
// Assign your data structure to your viewController
firstVC.data = DisplayableData(title: "first", description: "desc")
let secondVC = DataViewController()
secondVC.data = DisplayableData(title: "second", description: "desc")
let thirdVC = DataViewController()
thirdVC.data = DisplayableData(title: "third", description: "desc")
return [firstVC, secondVC, thirdVC]
}()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
// Set your viewControllers
setViewControllers([pages.first!], direction: .forward, animated: false, completion: nil)
}
}
extension PageViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
// Lets check if the viewController is the right type
guard let viewController = viewController as? DataViewController else {
fatalError("Invalid viewController type in PageViewController")
}
// Load the next one, if it is the last, load the first one
let presentedVCIndex: Int! = pages.index(of: viewController)
if presentedVCIndex + 1 > pages.count - 1 {
return pages.first
}
return pages[presentedVCIndex + 1]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// Lets check if the viewController is the right type
guard let viewController = viewController as? DataViewController else {
fatalError("Invalid viewController type in PageViewController")
}
// Load the previous one, if it is the first, load the last one
let presentedVCIndex: Int! = pages.index(of: viewController)
if presentedVCIndex - 1 < 0 {
return pages.last
}
return pages[presentedVCIndex - 1]
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return pages.count
}
}
+0
ありがとう、それを実装しようとします。メリークリスマス !! –
関連する問題
- 1. スワイプで新しい行を作成するには
- 2. GridViewで左にスワイプして右にスワイプします
- 3. ios-coreデータを使用してプログラムで新しいテーブルを作成する
- 4. プログラムで新しいXtextプロジェクトをプログラムで作成する
- 5. リスト項目を左にスワイプして右にスワイプしますか?
- 6. 新しいビューをプログラムで作成して管理する
- 7. cocos2dでプログラムで新しいUIViewを作成するには?
- 8. Office JSを使用してプログラムで新しいシートを作成
- 9. データを更新するためにスワイプしてデータを更新する
- 10. MoinMoinに新しいページをプログラムで作成する方法は?
- 11. プログラムでSpringに新しいDBを作成する
- 12. 新しいviewControllerをプッシュするとTabBarは常に左に移動します
- 13. IAMで新しいユーザーをプログラムで作成しようとしています
- 14. Umbracoでプログラムで新しいメンバーを作成する
- 15. 左にスワイプしてhorizontalallをリフレッシュしてくださいrecyclerView
- 16. Androidはプログラムで新しいカレンダーを作成しますか?
- 17. プログラムでgithubの新しいリポジトリを作成するrubyライブラリ
- 18. 新しいユーザーjazn-data.xmlをプログラムで作成する方法は?
- 19. logbackプログラムで新しいログインスタンスを作成する
- 20. プログラムで新しいメールアカウントを作成する
- 21. Monotouch:動的にViewControllerを使ってUITabbarをプログラムで作成する
- 22. ViewController segueをプログラムで実行しない
- 23. コードネーム1:スワイプ可能なコンテナを左にだけスワイプします
- 24. 左のスワイプでビューコントローラをプッシュ
- 25. データでViewControllerを初期化し、プログラムで画面に表示します
- 26. プログラムでUITableViewCellをスワイプしますか?
- 27. playbook:新しいフォルダを作成してデータを保存する
- 28. 新しいシートを作成してデータをコピーする
- 29. XamarinをスワイプするときにCarouselViewで左右にスワイプを無効にする
- 30. Applozic sdk、プログラムで新しいグループを作成できません
正確には、「UIPageViewController」はあなたの問題を解決するのに最適な方法です。 – dirtydanee
しかし、ストーリーボードを使用してUIPageViewControllerに与えられたすべての例は、すべてのviewControllerを手動で与えています。 –
あなたはどこからでもデータをダウンロードしていますか?スワイプで? – dirtydanee