Я установил PageViewController
в SwiftUI, следуя известному руководству Взаимодействие с UIKit , с UIViewControllerRepresentable
et c.
Мой массив контроллеров состоит из простых Просмотры SwiftUI. Я передаю простую структуру IntroPage
для предоставления содержимого. Представления вложены, как это принято в SwiftUI, таким образом:
PageView
- IntroScreen // part of the pages array
- VStack
- Text
- Image
- ButtonView // a separate view struct
- HStack
- ForEach // iterating through the buttons in my IntroPage Object
- Button
PageControl
Теперь я хочу добавить в эти представления несколько кнопок . Их следует настраивать через мою структуру IntroPage
. Один из них переходит на следующую страницу в PageViewController, другой сообщает PageViewController, что сначала нужно добавить больше страниц, еще одна кнопка закрывает весь PageViewController.
Я не могу понять, как получить доступ к этим методам в PageViewController, где их реализовать (представление экземпляра? Координатор PageViewController?) И как получить доступ к нужным мне объектам (например, currentPage
Переменная привязки PageViewController).
Например, я реализовал функцию forward()
в координаторе PageViewController:
func forward() {
if parent.currentPage < parent.controllers.count - 1 {
parent.currentPage += 1
}
}
... которая отлично работает, с анимацией и всем остальным , если я добавлю кнопку рядом с PageView в моем последнем представлении. Но я все еще не могу вызвать это из кнопки, содержащейся в дочернем представлении.
Есть идеи?
РЕДАКТИРОВАТЬ: По запросу, вот ситуация в ButtonView.
struct IntroButtonView: View {
var page: IntroPage
var body: some View {
HStack() {
Button(action:dismiss) {
Text("LocalizedButtonTitle")
}
// ... more buttons, based on certain conditions
}
}
func dismiss() {
// how to dismiss the modally presented controller ?
}
func next() {
// how to advance to the next page
}
func expand() {
// how to add more pages to the pages array
}
}
Или, может быть, я совершенно не прав и все еще думаю категориями «событий», а не «деклараций» ...