【发布时间】:2020-10-11 18:31:57
【问题描述】:
当我使用第一段代码时,我得到了两个单独的页面,第 1 页的“运行 1”和第 2 页的“运行 2”。
let pages: [String] = ["Run1","Run2"]
for text in pages {
let vc = TextViewController(with: text)
myControllers.append(vc)
}
但是,当我更新数组以从结构文件中恢复数组时,我只得到一个包含两个运行标题的页面,即“Run1Run 2”
let pages: [String] = [run.runTitle]
for text in pages {
let vc = TextViewController(with: text)
myControllers.append(vc)
}
我想像第一部分一样为每个运行标题单独设置页面,我做错了什么?
附加代码:
import UIKit
var runs = [Run]()
class ViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
// return the VC to be shown based on current position
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// find index in array
guard let index = myControllers.firstIndex(of: viewController), index > 0 else {
return nil
}
let before = index - 1
return myControllers[before]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
// find index in array
guard let index = myControllers.firstIndex(of: viewController), index < (myControllers.count - 1) else {
return nil
}
let after = index + 1
return myControllers[after]
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now(), execute: { self.presentPageVC()})
}
// create property of array objects
var myControllers = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
if let savedRuns = Run.loadRuns() {
runs = savedRuns
}
let pages: [String] = [run.runTitle]
for text in pages {
let vc = TextViewController(with: text)
myControllers.append(vc)
}
}
func presentPageVC() {
guard let first = myControllers.first else {
return
}
let vc = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: nil)
// set up datasources
vc.delegate = self
vc.dataSource = self
vc.setViewControllers([first], direction: .forward, animated: true, completion: nil)
present(vc, animated: true)
}
}
【问题讨论】:
-
什么是
runTitle? -
如果这两个代码sn-ps之间的唯一区别是第一行,那么当你为
run.runTitle设置断点时你会看到什么?["Run1","Run2"]或 ["Run1Run2"]`? -
实际上,是的,就像其他评论所问的那样,请给我们更多关于
run.runTitle是什么的信息。 -
嘿@GabrielPires 和 dfd runTitle 只是一个字符串,例如“穿过市中心”。因此我可以输入 ["Run through City Centre","Run through Street X"]。在我存储的数组中,我有两个数组项“穿过市中心”和“穿过 X 街”。但是,当我尝试使用 run.runTitle 将它们带回来时,我希望它们是分开的,但它们是合并的。我在文件顶部有 var runs = [Run]()。
-
也许我需要在 let pages 中创建一个循环: [String] = ["","",""] 我一次拉出一个数组?阻止它把一切都带回来?我该怎么做?
标签: arrays swift xcode uiviewcontroller swift5