防止UIViewControllerRepresentable更新

时间:2019-09-20 16:31:51

标签: swift uiviewcontroller swiftui

我正在关注Interfacing with UIKit tutorial from the SwiftUI website,并且正在我的应用程序中实现自己的PageViewController。目前,它与本教程共享相同的代码。

问题是我在controllers内部传递的PageViewController之一的Button会更改容器的State

这是Container

@State private var counter: Int
@State private var currentPage: Int = 0

var body: some View {
    VStack {
        PageViewController(
            controllers: [UIHostingController(rootView: Page(counter: self.$counter))], 
            currentPage: self.$currentPage
        )
    }
}

Page就像

struct Page: some View {

    @Binding counter: Int

    var body: some View {
        Button(
            action: {
                self.counter +=1
            }
        ){
             Text("Increase counter")
        }
        Text("Value: \(self.counter)")
    }
}

每当我按下Button时,计数器就会增加,State被更新,并且updateUIViewController结构内部的PageViewController被触发。

更新会执行此操作

func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
   pageViewController.setViewControllers([sItemsControllers[self.currentPage]], direction: .forward, animated: true)   
}

因此,每次触发updateUIViewController时,PageViewController都会更新,并显示下一页。

关于如何预防的任何建议?

0 个答案:

没有答案