如何在数组更改时更新SwiftUI视图(删除或添加到数组)

oalqel3c  于 2024-01-05  发布在  Swift
关注(0)|答案(1)|浏览(135)

我有一个钱包视图,通过选项卡栏控制器调用。钱包项目存储在一个名为walletItems的数组中.假设我最初进入wallet时数组中有两个项目。所以我可以在这两个项目之间来回滑动。然后我决定删除或添加另一个项目到我的walletItems数组。当我返回视图时,原来的两个项目仍然在wallet中。我我想让视图显示walletItems数组中的当前内容。

  1. import Foundation
  2. import UIKit
  3. import SwiftUI
  4. class WalletSwipeViewController: UIViewController {
  5. @IBSegueAction func embedSwiftUIView(_ coder: NSCoder) -> UIViewController? {
  6. return UIHostingController(coder: coder, rootView: WalletView())
  7. }
  8. override func viewDidLoad() {
  9. super.viewDidLoad()
  10. //collectionView.backgroundColor = .green
  11. }
  12. override func viewWillAppear(_ animated: Bool) {
  13. print("IN WALLET WILL LOAD")
  14. super.viewWillAppear(true)
  15. //universal.loadWallet()
  16. }
  17. }
  18. struct WalletView: View {
  19. // @State var wic = walletItemsChanged
  20. //let universal = Universal()
  21. init() {
  22. //@ObservedObject var wIO : WalletItemsObservable
  23. UIPageControl.appearance().currentPageIndicatorTintColor = .green
  24. UIPageControl.appearance().pageIndicatorTintColor = .red //.withAlphaComponent(1.5)
  25. //coupText = walletItems[0].busID!
  26. }
  27. //@ObservedObject var wIO : WalletItemsObservable
  28. //@ObservedObject var wIO : WalletItemsObservable
  29. var body: some View {
  30. VStack{
  31. TabView{
  32. ForEach(**walletItems**) {wall in
  33. //ForEach(wIO.wI) { wall in
  34. let temp = wall.busID! + "-" + String(wall.dealNum)
  35. VStack{
  36. Text(wall.busID!)
  37. .padding(20)
  38. Image(uiImage: wallImages[temp]!)
  39. .resizable()
  40. .frame(width: 300.0, height: 400.0)
  41. }
  42. }
  43. }
  44. //.background(Color.red)
  45. .tabViewStyle(.page)
  46. .indexViewStyle(.page(backgroundDisplayMode: .interactive))
  47. .cornerRadius(30)
  48. .padding(10)
  49. }
  50. }
  51. }

字符串

hi3rlvi2

hi3rlvi21#

要根据walletItems数组中的更改动态更新TabView,您应该使用ObservableObject来表示数据。(例如,WalletItemsObservable)。在WalletView中,使用@ObservedObject来观察WalletItemsObservable中的更改。这样,当您从walletItems数组中添加或删除项目时,SwiftUI将自动更新TabView以反映更改。

相关问题