Выберите ячейку SwiftUI в Popover - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь сделать всплывающее окно в 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 при нажатии кнопки сохранения?

Popover Xcode Playground

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

1 Ответ

0 голосов
/ 07 июля 2019

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

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