Выберите ячейку 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))