У меня есть UIPickerView
на моем UIView
вместе с UITextField
. Я позволяю пользователю выбрать значение из средства выбора или ввести пользовательское значение в текстовое поле.
Когда пользователь выбирает какую-либо опцию в средстве выбора, значения переменных меняются (в методе pickerView:didSelectRow:inComponent:
). Но если пользователь не выбирает какое-либо значение в средстве выбора (поскольку он хочет выбрать 1-й вариант, который уже выбран), этот метод не вызывается, и выбор не отражается в переменной.
Я попытался установить значение переменной по умолчанию для первого параметра в средстве выбора. Но в этом случае, когда пользователь редактирует текстовое поле, переменная будет иметь текстовое поле текста. Теперь, если пользователь решит снова выбрать первое значение, новое значение не будет отражено в переменной.
Как я могу преодолеть это? Спасибо.
Вот соответствующий код
В моем viewDidLoad
у меня есть это утверждение, чтобы установить selectText
на первый вариант выбора по умолчанию
[self setSelectText:[myArray objectAtIndex:0]];
textFieldShouldReturn
- (BOOL)textFieldShouldReturn:(UITextField *)txtField{
[txtField resignFirstResponder];
[self setSelectText:txtField.text];
return YES;
}
PickerViewDelegate's 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-ую строку.