【发布时间】:2019-10-26 22:25:21
【问题描述】:
通常情况下,我们被限制讨论 Apple 预发布的东西,但我已经看到很多关于 SwiftUI 的讨论,所以我怀疑它没问题;就这一次。
我正在学习其中一个教程(我这样做)。
我在“与 UIKit 交互”教程中的可滑动屏幕下方添加一对按钮:https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit
这些是“下一个”和“上一个”按钮。当在一端或另一端时,相应的按钮会隐藏。我的工作正常。
我遇到的问题是访问由 PageViewController 表示的 UIPageViewController 实例。
我更改了 currentPage 属性(通过使 PageViewController 成为 UIPageViewController 的委托),但我需要强制 UIPageViewController 以编程方式进行更改。
我知道我可以通过重绘 PageView 主体来“强制”显示,以反映新的 currentPage,但我不完全确定该怎么做。
struct PageView<Page: View>: View {
var viewControllers: [UIHostingController<Page>]
@State var currentPage = 0
init(_ views: [Page]) {
self.viewControllers = views.map { UIHostingController(rootView: $0) }
}
var body: some View {
VStack {
PageViewController(controllers: viewControllers, currentPage: $currentPage)
HStack(alignment: .center) {
Spacer()
if 0 < currentPage {
Button(action: {
self.prevPage()
}) {
Text("Prev")
}
Spacer()
}
Text(verbatim: "Page \(currentPage)")
if currentPage < viewControllers.count - 1 {
Spacer()
Button(action: {
self.nextPage()
}) {
Text("Next")
}
}
Spacer()
}
}
}
func nextPage() {
if currentPage < viewControllers.count - 1 {
currentPage += 1
}
}
func prevPage() {
if 0 < currentPage {
currentPage -= 1
}
}
}
我知道答案应该很明显,但我很难弄清楚如何以编程方式刷新 VStack 或正文。
【问题讨论】:
-
什么是
PageViewController? -
只需设置
currentPage就足以重新加载正文 -
@Fogmeister - 这是来自教程,所以 PageViewController 是他们创建的示例类。它包装了一个 UIPageViewController 实例。我遇到的问题是我在声明式和命令式语言之间切换时经常遇到的问题。在这种情况下,Swift 两者兼而有之。我几乎拥有它。 Lu_的回答是正确的。我只需要调整一个化妆品
-
@Lu_ > 只需设置 currentPage 就足以重新加载正文
-
仅供参考,我很确定事情的“正常”已经改变了。您不像 10 年前那样处于同一类型的 NDA 之下。事实上,到下个月,他们所有的测试版操作系统都将是公开测试版。