Я пытаюсь сделать всплывающее окно в 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 при нажатии кнопки сохранения?
(При запуске игровой площадки нужно нажать на стартовую площадку второй раз, чтобы запустить ее правильно, в первый раз всплывающее окно Сохранить не работает).