Почему моя привязка в закрытии вызывается от button.disabled () не обновляется?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Почему моя привязка в закрытии вызывается от button.disabled () не обновляется?

Сообщение Anonymous »

У меня есть простой код с Textfield , Picker и кнопкой . Кнопка включена только тогда, когда TextField имеет текст, а Picker имеет выбранное значение.
Я структурирован так, чтобы Textfield , кнопка и ViewBuilder Закрытие с названием PickerContent находится в классе TestView . Затем в классе TestViewWithPicker я вызову testView и реализую Picker в своем закрытии PickerContent . Если это кажется запутанной настройкой, это потому, что это MRE реального кода из моего приложения, где это имеет больше смысла. Вот код: < /p>

Код: Выделить всё

import SwiftUI

struct TestView
: View {
@ViewBuilder var additionalEnterButtonDisabledConditions: () -> Bool
@ViewBuilder var pickerContent: () -> PickerContent

@State private var userInput: String = ""

var body: some View {
HStack {
TextField("", text: $userInput)
.textFieldStyle(.roundedBorder)
.padding()

pickerContent()

Button("Enter") {}
.disabled(userInput.isEmpty || additionalEnterButtonDisabledConditions())
.buttonStyle(.borderedProminent)
.padding()
}
}
}

struct TestViewWithPicker: View {
@State private var selectedPickerItem: String? = nil

var body: some View {
TestView(
additionalEnterButtonDisabledConditions: {
return selectedPickerItem == nil
},
pickerContent: {
PickerView(selectedPickerItem: $selectedPickerItem)
}
)
}
}

struct PickerView: View {
@Binding var selectedPickerItem: String?

private let pickerItems: [String] = ["Option A", "Option B", "Option C"]

var body: some View {
Picker("", selection: $selectedPickerItem) {
Text("Select Picker Item").tag(nil as String?)

ForEach(pickerItems, id: \.self) { pickerItem in
Text(pickerItem).tag(pickerItem as String?)
}
}
.pickerStyle(.menu)
.fixedSize(horizontal: true, vertical: true)
}
}

struct HomeView: View {
var body: some View {
TestViewWithPicker()
}
}
Проблема, которая у меня есть, заключается в том, что условие моей кнопки .disabled не активируется, если выбран не будет сделан в Picker :

Код: Выделить всё

.disabled(self.userInput.isEmpty || self.additionalEnterButtonDisabledConditions())
Чтобы воспроизвести ошибку, если вы запустите код и выберете элемент без нола в Picker , затем введите немного текста в Textfield , кнопка не будет включена так, как должна. Но если вы выберете другой элемент в сборщике, он будет. Причина, по которой возникает проблема, заключается в том, что я отправляю Self.selectedPickerItem в качестве привязки с pickerview . Если я не реализую сборщика в отдельном классе и не ставлю его непосредственно в закрытие PickerContent (и, следовательно, не отправляйте Self.selectedPickerItem в качестве привязки), проблема не возникает.
>

Подробнее здесь: https://stackoverflow.com/questions/796 ... t-updating
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»