我正在尝试使用SwiftUI
在UIHostingController
中进行弹出式显示,并提供可点击的列表。首先,应填写用户名和密码,然后在列表中点击用户角色,并在点击“保存”按钮时关闭弹出窗口。
此外,在验证用户信息之前,应禁用导航栏中的保存按钮。
可以从我的GitHub存储库https://github.com/imyrvold/Popover
中获取Xcode游乐场。为了能够将AddUserView
用作UIHostingController
中的rootView,我必须使用Xcode故事板,并将其添加到Xcode Playground的资源中。
import SwiftUI
import Combine
public struct AddUserView : View {
@ObjectBinding public var loginInfo: LoginInfo
@EnvironmentObject var viewModel: RoleViewModel
@State var selectedRole: Role? = nil
@Environment(\.isPresented) var isPresented: Binding<Bool>?
public var body: some View {
NavigationView {
VStack {
TextField(self.$loginInfo.firstName, placeholder: Text("First Name"))
TextField(self.$loginInfo.lastName, placeholder: Text("Last Name"))
TextField(self.$loginInfo.email, placeholder: Text("Email"))
SecureField(self.$loginInfo.password, placeholder: Text("Password"))
Divider()
List(self.viewModel.roles) { role in
RoleCell(role: role).tapAction {
self.selectedRole = role
}
}
}
.padding()
.navigationBarTitle(Text("Add User"))
.navigationBarItems(trailing:
Button(action: {
self.saveAction()
self.isPresented?.value = false
}) {
Text("Save")
})//.disabled(!self.loginInfo.isValid)
}
}
// MARK:- Action methods
func saveAction() {
}
}
我遇到的第一个问题是,当我取消注释disabled(!self.loginInfo.isValid)
时,所有的TextField也都被禁用了。不确定这是否是SwiftUI中的错误吗?
我还想让role
单元在点击时在单元格上设置复选标记,但是到目前为止,我仍无法弄清楚该怎么做。
点击保存按钮时,如何关闭弹出窗口?
(运行游乐场时,必须再次单击“开始游乐场”才能正常运行,这是第一次“保存”弹出窗口不起作用)。
答案 0 :(得分:0)
您尝试过
.navigationBarItems(trailing:
Button(action: {
self.saveAction()
self.isPresented?.value = false
}) {
Text("Save")
}.disabled(!self.loginInfo.isValid))