在通过HostingViewController展示的SwiftUI View中按下"保存按钮"后,我希望能够返回到我的UIKit View Controller页面。
这是如何从我的UIKit VC导航到我的SwiftUI视图。
let profileView = suiProfileView().environmentObject(suiProfileViewModel())
let profileVC = UIHostingController(rootView: profileView)
let navVC = UINavigationController(rootViewController: profileVC)
navVC.modalPresentationStyle = .fullScreen
SideMenuManager.default.leftMenuNavigationController?.present(navVC, animated: true , completion: nil)
这是我的SwiftUI视图,在按下保存按钮后我想要关闭它
import SwiftUI
import Combine
struct suiProfileView: View {
@SwiftUI.Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@EnvironmentObject var profileViewModel: suiProfileViewModel
@State var suiTitleText = t("general.save")
var body: some View {
GeometryReader { geo in
VStack {
personalInfoSection
Spacer()
Button("Save", action: profileViewModel.saveProfile)
.frame(width: geo.size.width * 0.8, height: geo.size.height * 0.08, alignment: .center)
}
.onReceive(profileViewModel.viewDismissalModePublisher) { shouldDismiss in
if shouldDismiss {
self.presentationMode.wrappedValue.dismiss()
}
}
.frame(width: geo.size.width, height: geo.size.height, alignment: .center)
.padding()
}
}
}
这是我的ProfileViewModel类,它在运行一些业务逻辑之后使用Combine发布shouldDismissView变量。
class suiProfileViewModel: suiProfileViewModelProtocol {
//private var model: suiProfileFormProtocol
@Published var profile = suiProfileForm()
var viewDismissalModePublisher = PassthroughSubject<Bool, Never>()
private var shouldDismissView = false {
didSet {
viewDismissalModePublisher.send(shouldDismissView)
}
}
func businessLogicThatDeterminesIfShouldDismissView() {
//....
}
}
出现了一些问题,我在我的SwiftUI视图中调用self.presentationMode.wrappedValue.dismiss()
无法关闭我的SwiftUI视图,也不能让我返回到最初呈现它的UIKit视图控制器。希望能得到任何帮助。提前感谢。