Обычно мы не можем обсуждать предварительную версию Apple, но я уже видел множество обсуждений SwiftUI, поэтому я подозреваю, что все в порядке; только один раз.
Я нахожусь в процессе вождения в сорняки на одном из учебных пособий (я делаю это).
Я добавляю пару кнопок под прокручивающимися экранами в учебном пособии «Интерфейс с UIKit»: https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit
Это кнопки «Далее» и «Предыдущая». Когда на одном конце или другом, соответствующая кнопка скрывается. У меня это работает нормально.
У меня проблема с доступом к экземпляру UIPageViewController, представленному PageViewController.
У меня есть свойство 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 или тело.