Мой ВК содержит:
-1 имя textView
-1 ярлык // для ароматов
-2 переключателя // да и нет
-1 nextButton
То, что я хочу сделать, - это отключить nextButton до тех пор, пока не будет заполнено textView, текстовое значение метки изменится с исходного названия «Pick a Flavor» на любой выбранный ими аромат, иВыбраны 1 из переключателей.
Я знаю, что с помощью textView's textViewDidEndEditing()
Я могу прослушать изменения в нем после того, как пользователь закончит редактирование, отключить или включить nextButton.
func textViewDidEndEditing(_ textView: UITextView) {
handleTextInputChanged()
}
@objc func handleTextInputChanged() {
let isFormValid = nameTextView.text?.count ?? 0 > 0
if isFormValid {
nextButton.isEnabled = true
nextButton.backgroundColor = .red
} else {
nextButton.isEnabled = false
nextButton.backgroundColor = .lightgray
}
}
Как бы я дополнительно отключил или включил nextButton в зависимости от того, была ли выбрана одна из переключателей, и текст метки был изменен в дополнение к проверке, что внутри nameTextView есть текст?
К сведению, текст ярлыка изначально установлен с помощью «Pick a Flavor».У меня есть распознаватель жестов, подключенный к нему, и когда он нажал новый VC с tableView представлен.Пользователь выбирает аромат, протокол отправляет его обратно на этот виртуальный канал, и текст метки изменится на тот, который был выбран (например, заголовок метки скажет «Butter Pecan», если он выбран).Кнопка NextButton должна быть отключена, если заголовок метки по-прежнему установлен на «Pick a Flavor».
код:
let flavorLabel: UILabel = {
let label = UILabel()
label.text = "Pick a Flavor"
label.isUserInteractionEnabled = true
return label
}()
let nameTextView: UITextView = {
let textView = UITextView()
return textView
}()
let noButton: DLRadioButton = {
let button = DLRadioButton(type: .custom)
button.setTitle("No", for: .normal)
button.setTitleColor(UIColor.lightGray, for: .normal)
button.addTarget(self, action: #selector(noButtonPressed), for: .touchUpInside)
return button
}()
let yesButton: DLRadioButton = {
let button = DLRadioButton(type: .custom)
button.setTitle("Yes", for: .normal)
button.setTitleColor(UIColor.lightGray, for: .normal)
button.addTarget(self, action: #selector(yesButtonPressed), for: .touchUpInside)
return button
}()
let nextButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Next", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.isEnabled = false
button.backgroundColor = .lightGray
button.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside)
return button
}()
var choice: Bool?
override func viewDidLoad() {
super.viewDidLoad()
flavorVC.delegate = self
}
func textViewDidEndEditing(_ textView: UITextView) {
handleTextInputChanged()
}
@objc func handleTextInputChanged() {
let isFormValid = nameTextView.text?.count ?? 0 > 0
if isFormValid {
nextButton.isEnabled = true
nextButton.backgroundColor = .red
} else {
nextButton.isEnabled = false
nextButton.backgroundColor = .lightgray
}
}
@objc fileprivate func noButtonPressed() {
choice = false
}
@objc fileprivate func yesButtonPressed() {
choice = true
}
// delegate method from FlavorController
func selectedFlavor(flavor: String) {
flavorLabel.text = flavor // eg. "Butter Pecan"
}