У меня есть UIPickerView
на моем UIView
вместе с UITextField
. Я позволяю пользователю выбрать значение из сборщика или ввести пользовательское значение в текстовое поле.
Когда пользователь выбирает любую опцию из сборщика, значения переменных меняются штрафом (в методе pickerView:didSelectRow:inComponent:
). Но если пользователь не выбирает какое-либо значение на сборщике (coz они хотят выбрать первый вариант, который уже выбран), этот метод не вызывается, и выбор не отображается в переменной.
Я попытался установить значение по умолчанию для переменной в первый вариант в сборщике. Но в этом случае, когда пользователь редактирует текстовое поле, переменная будет иметь текст текстового поля. Теперь, если пользователь решает снова выбрать первое значение, новое значение не будет отражено в переменной.
Как я могу это преодолеть? Спасибо.
Здесь соответствующий код
В моем viewDidLoad
у меня есть этот оператор, чтобы по умолчанию установить selectText
в первый вариант сборщика
[self setSelectText:[myArray objectAtIndex:0]];
textFieldShouldReturn
- (BOOL)textFieldShouldReturn:(UITextField *)txtField{
[txtField resignFirstResponder];
[self setSelectText:txtField.text];
return YES;
}
PickerViewDelegate didSelectRow
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// report the selection to the UI label
[self setSelectText:[myArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
}
Проблема возникает, когда пользователь редактирует текст, а затем решает, что он все-таки хочет использовать первое значение сборщика. В этом случае они отклонят клавиатуру и нажимают на 1-ю опцию сборщика (который уже выбран). Это действие не вызывает didSelectRow
, поэтому значение selectText не изменяется.
Чтобы пользователь мог изменить значение selectText
, сначала нужно выбрать другое значение из подборщика, а затем выбрать 1-ю строку.