UIPickerView - 第一行选择不会调用didSelectRow

los*_*sit 19 iphone uipickerview uitextfield

UIPickerView和我UIView在一起UITextField.我让用户从选择器中选择一个值或在文本字段中输入自定义值.

当用户从选择器中选择任何选项时,变量值将在(pickerView:didSelectRow:inComponent:方法中)改变.但是如果用户没有在选择器上选择任何值(因为他们想要选择已经选择的第一个选项),则不会调用此方法,并且选择不会反映在变量中.

我尝试将变量的默认值设置为选择器中的第一个选项.但在这种情况下,当用户编辑文本字段时,变量将具有文本字段的文本.现在,如果用户决定再次选择第一个值,则新值不会反映在变量中.

我怎么能克服这个?谢谢.

这是相关的代码

在我的viewDidLoad我有这个语句selectText默认情况下设置选择器的第一个选项

[self setSelectText:[myArray objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)

textFieldShouldReturn

- (BOOL)textFieldShouldReturn:(UITextField *)txtField{
    [txtField resignFirstResponder];
    [self setSelectText:txtField.text];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

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]]];
}
Run Code Online (Sandbox Code Playgroud)

当用户编辑文本然后决定他想要使用选择器的第一个值时,就会出现问题.在这种情况下,他们将关闭键盘并单击选择器的第一个选项(已选中).此操作不会调用didSelectRow,因此selectText的值不会更改.

为了使用户能够更改其值selectText,他们首先必须从选择器中选择一些其他值,然后选择第一行.

Ben*_*zar 26

每次使用此代码进行选择时,不要"推"选择器的值:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
Run Code Online (Sandbox Code Playgroud)

当用户使用类似于以下内容的单击按钮(或您正在使用的其他事件)时,您应该"拉动它":

- (void)myAction:(id)sender
{

    NSInteger row = [myPicker selectedRowInComponent:0];
    selectedText = [myArray objectAtIndex:(NSUInteger)row];


}
Run Code Online (Sandbox Code Playgroud)

用于清除文本:UITextField该类提供用于清除当前文本的内置按钮.因此,如果用户不想要该文本,他可以丢弃它.

myTextField.clearButtonMode = UITextFieldViewModeAlways; 
Run Code Online (Sandbox Code Playgroud)

所以在脚本中,你会检查TextField它是否有值,如果它有值,你使用TextField,如果它没有值,你从中提取信息Picker.


Pat*_*rer 5

您可以直接调用委托的方法,例如

picker.delegate?.pickerView?(picker, didSelectRow: 0, inComponent: 0)
Run Code Online (Sandbox Code Playgroud)