我有一个钱包视图,通过选项卡栏控制器调用。钱包项目存储在一个名为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)
}
}
}
字符串
1条答案
按热度按时间hi3rlvi21#
要根据walletItems数组中的更改动态更新TabView,您应该使用ObservableObject来表示数据。(例如,
WalletItemsObservable
)。在WalletView中,使用@ObservedObject来观察WalletItemsObservable中的更改。这样,当您从walletItems数组中添加或删除项目时,SwiftUI将自动更新TabView以反映更改。