Select Popover 中的 SwiftUI 单元格
Select SwiftUI cell in Popover
我正在尝试在 SwiftUI
中使用带有可点击列表的 UIHostingController
制作弹出窗口。首先,填写用户名和密码,然后在列表中点击用户角色,点击保存按钮时弹窗消失。
此外,在验证用户信息之前,应禁用导航栏中的保存按钮。
可以从我的 GitHub 存储库中获取 Xcode 游乐场 https://github.com/imyrvold/Popover
为了能够将 AddUserView
用作 UIHostingController
中的根视图,我必须使用 Xcode 故事板,并将其添加到 [=38= 中的资源中] 游乐场。
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
单元格在点击时在单元格上设置复选标记,但到目前为止我还不知道该怎么做。
以及如何在点击保存按钮时关闭 Popover?
(运行打开游乐场时,必须再次单击启动游乐场才能运行正确,第一次保存弹出窗口不起作用。
你试过这个吗
.navigationBarItems(trailing:
Button(action: {
self.saveAction()
self.isPresented?.value = false
}) {
Text("Save")
}.disabled(!self.loginInfo.isValid))
我正在尝试在 SwiftUI
中使用带有可点击列表的 UIHostingController
制作弹出窗口。首先,填写用户名和密码,然后在列表中点击用户角色,点击保存按钮时弹窗消失。
此外,在验证用户信息之前,应禁用导航栏中的保存按钮。
可以从我的 GitHub 存储库中获取 Xcode 游乐场 https://github.com/imyrvold/Popover
为了能够将 AddUserView
用作 UIHostingController
中的根视图,我必须使用 Xcode 故事板,并将其添加到 [=38= 中的资源中] 游乐场。
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
单元格在点击时在单元格上设置复选标记,但到目前为止我还不知道该怎么做。
以及如何在点击保存按钮时关闭 Popover?
(运行打开游乐场时,必须再次单击启动游乐场才能运行正确,第一次保存弹出窗口不起作用。
你试过这个吗
.navigationBarItems(trailing:
Button(action: {
self.saveAction()
self.isPresented?.value = false
}) {
Text("Save")
}.disabled(!self.loginInfo.isValid))