Выберите ячейку SwiftUI в Popover

Я пытаюсь сделать поповер в SwiftUI с помощью UIHostingController со списком, который можно нажать. Сначала необходимо ввести имя пользователя и пароль, а затем нажать на роль пользователя в списке, а всплывающее окно следует отклонить при нажатии кнопки сохранения.

Кроме того, кнопка сохранения на панели навигации должна быть отключена, пока информация о пользователе не будет проверена.

Игровую площадку Xcode для этого можно получить из моего репозитория GitHub https://github.com/imyrvold/Popover

Чтобы иметь возможность использовать AddUserView как rootView в UIHostingController Я должен был использовать раскадровку 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, когда нажата кнопка сохранения?

(При запуске игровой площадки, нажмите на стартовую площадку во второй раз, чтобы запустить ее правильно, в первый раз всплывающее окно Сохранить не работает).

1 ответ

Решение

Вы пробовали это

.navigationBarItems(trailing:
                Button(action: {
                    self.saveAction()
                    self.isPresented?.value = false
                }) {
                    Text("Save")
            }.disabled(!self.loginInfo.isValid))
Другие вопросы по тегам