fix register close

This commit is contained in:
cheykrym 2025-10-05 02:59:55 +03:00
parent 01756710a3
commit 53b90dc646
2 changed files with 123 additions and 127 deletions

View File

@ -124,7 +124,7 @@ struct LoginView: View {
} }
.padding(.top, 10) .padding(.top, 10)
.sheet(isPresented: $isShowingRegistration) { .sheet(isPresented: $isShowingRegistration) {
RegistrationView(viewModel: viewModel) RegistrationView(viewModel: viewModel, isPresented: $isShowingRegistration)
} }
Spacer() Spacer()

View File

@ -9,6 +9,7 @@ import SwiftUI
struct RegistrationView: View { struct RegistrationView: View {
@ObservedObject var viewModel: LoginViewModel @ObservedObject var viewModel: LoginViewModel
@Binding var isPresented: Bool
@Environment(\.presentationMode) private var presentationMode @Environment(\.presentationMode) private var presentationMode
@State private var username: String = "" @State private var username: String = ""
@ -40,19 +41,14 @@ struct RegistrationView: View {
var body: some View { var body: some View {
NavigationView { NavigationView {
ScrollView { ScrollView {
ZStack { ZStack(alignment: .top) {
Color.clear Color.clear
.contentShape(Rectangle()) .contentShape(Rectangle())
.onTapGesture { .onTapGesture { hideKeyboard() }
hideKeyboard()
}
VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 16) {
Group { Group {
HStack { HStack {
TextField(NSLocalizedString("Логин", comment: "Логин"), text: $username) TextField(NSLocalizedString("Логин", comment: "Логин"), text: $username)
.autocapitalization(.none) .autocapitalization(.none)
@ -159,14 +155,15 @@ struct RegistrationView: View {
} }
.padding() .padding()
} }
.navigationBarItems(trailing: }
Button(action: { .navigationTitle(Text(NSLocalizedString("Регистрация", comment: "Регистрация")))
presentationMode.wrappedValue.dismiss() .toolbar {
}) { ToolbarItem(placement: .navigationBarTrailing) {
Button(action: dismissSheet) {
Text(NSLocalizedString("Закрыть", comment: "Закрыть")) Text(NSLocalizedString("Закрыть", comment: "Закрыть"))
} }
) }
.navigationTitle(Text(NSLocalizedString("Регистрация", comment: "Регистрация"))) }
.alert(isPresented: $showError) { .alert(isPresented: $showError) {
Alert( Alert(
title: Text(NSLocalizedString("Ошибка регистрация", comment: "Ошибка")), title: Text(NSLocalizedString("Ошибка регистрация", comment: "Ошибка")),
@ -174,13 +171,6 @@ struct RegistrationView: View {
dismissButton: .default(Text(NSLocalizedString("OK", comment: ""))) dismissButton: .default(Text(NSLocalizedString("OK", comment: "")))
) )
} }
}
.onTapGesture {
hideKeyboard()
}
}
.onTapGesture {
hideKeyboard()
} }
} }
@ -190,7 +180,7 @@ struct RegistrationView: View {
viewModel.registerUser(username: username, password: password, invite: inviteCode.isEmpty ? nil : inviteCode) { success, message in viewModel.registerUser(username: username, password: password, invite: inviteCode.isEmpty ? nil : inviteCode) { success, message in
isLoading = false isLoading = false
if success { if success {
presentationMode.wrappedValue.dismiss() dismissSheet()
} else { } else {
errorMessage = message ?? NSLocalizedString("Неизвестная ошибка.", comment: "") errorMessage = message ?? NSLocalizedString("Неизвестная ошибка.", comment: "")
showError = true showError = true
@ -198,6 +188,12 @@ struct RegistrationView: View {
} }
} }
private func dismissSheet() {
hideKeyboard()
isPresented = false
presentationMode.wrappedValue.dismiss()
}
private func hideKeyboard() { private func hideKeyboard() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
} }
@ -208,6 +204,6 @@ struct RegistrationView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
let viewModel = LoginViewModel() let viewModel = LoginViewModel()
viewModel.isLoading = false // чтобы убрать спиннер viewModel.isLoading = false // чтобы убрать спиннер
return RegistrationView(viewModel: viewModel) return RegistrationView(viewModel: viewModel, isPresented: .constant(true))
} }
} }