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

oalqel3c  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(109)

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

import Foundation
import UIKit
import SwiftUI

class WalletSwipeViewController: UIViewController {
    
    @IBSegueAction func embedSwiftUIView(_ coder: NSCoder) -> UIViewController? {
        return UIHostingController(coder: coder, rootView: WalletView())
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //collectionView.backgroundColor = .green
        
    }
    
    override func viewWillAppear(_ animated: Bool) {
       print("IN WALLET WILL LOAD")
        super.viewWillAppear(true)
        //universal.loadWallet()
    }

}

struct WalletView: View {
    
   // @State var wic = walletItemsChanged
   
    //let universal = Universal()
    init() {
        //@ObservedObject var wIO : WalletItemsObservable
        UIPageControl.appearance().currentPageIndicatorTintColor = .green
        UIPageControl.appearance().pageIndicatorTintColor = .red   //.withAlphaComponent(1.5)
        //coupText = walletItems[0].busID!
    }
    //@ObservedObject var wIO : WalletItemsObservable
    //@ObservedObject var wIO : WalletItemsObservable
    var body: some View {
        VStack{
            TabView{
            
                ForEach(**walletItems**) {wall in
                //ForEach(wIO.wI) { wall in
                    let temp = wall.busID! + "-" + String(wall.dealNum)
            
                    VStack{
                        
                        Text(wall.busID!)
                            .padding(20)
                        Image(uiImage: wallImages[temp]!)
                            .resizable()
                            .frame(width: 300.0, height: 400.0)
                            
                            
                    }
                }
            }
            //.background(Color.red)
            .tabViewStyle(.page)
            .indexViewStyle(.page(backgroundDisplayMode: .interactive))
            .cornerRadius(30)
            .padding(10)
        }
    }
}

字符串

hi3rlvi2

hi3rlvi21#

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

相关问题