在Popover中选择SwiftUI单元格

时间:2019-07-01 09:06:35

标签: popover swiftui xcplayground

我正在尝试使用SwiftUIUIHostingController中进行弹出式显示,并提供可点击的列表。首先,应填写用户名和密码,然后在列表中点击用户角色,并在点击“保存”按钮时关闭弹出窗口。

此外,在验证用户信息之前,应禁用导航栏中的保存按钮。

可以从我的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单元在点击时在单元格上设置复选标记,但是到目前为止,我仍无法弄清楚该怎么做。

点击保存按钮时,如何关闭弹出窗口?

Popover Xcode Playground

(运行游乐场时,必须再次单击“开始游乐场”才能正常运行,这是第一次“保存”弹出窗口不起作用)。

1 个答案:

答案 0 :(得分:0)

您尝试过

.navigationBarItems(trailing:
                Button(action: {
                    self.saveAction()
                    self.isPresented?.value = false
                }) {
                    Text("Save")
            }.disabled(!self.loginInfo.isValid))