仅在单击完成按钮时将 UIPickerView 选择添加到 TextField

Add UIPickerView selection to TextField only when clicking done button

我在工具栏中创建了一个带有完成按钮的 UIPickerView。我想完成以下任务:

用户在 UIPickerView 中选择一个类别,然后点击 "done" 按钮。结果应该是 UIPickerView 和工具栏消失,Category TextField 根据用户的选择进行更新。我几乎做对了一切。当点击完成按钮时,PickerView 和工具栏消失。但是,甚至在我点击按钮之前,文本字段就会更新。但我希望仅在点击完成按钮时更新文本字段。

任何人都可以指出我出错的正确方向吗?谢谢

这是我使用的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.

    //disable saveButton
    [_saveButton setEnabled:NO];

    [self.picker removeFromSuperview];
    [self.pickerToolbar removeFromSuperview];

    //Initialize Data
    _pickerData = @[@"Item 1", @"Item 2", @"Item 3", @"Item 4"];

    //Connect Data
    self.picker.dataSource = self;
    self.picker.delegate = self;

    _textFieldCategory.inputView = _picker;
    _textFieldCategory.inputAccessoryView = _pickerToolbar;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

// The number of columns of data
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

// The number of rows of data
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}

// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return _pickerData[row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    self.textFieldCategory.text = _pickerData[row];
}

- (IBAction)doneButtonTapped:(id)sender
{
    [self.picker removeFromSuperview];
    [self.pickerToolbar removeFromSuperview];

尝试创建实例变量,例如

NSInteger selectedRow;

pickerView:didSelectRow:inComponent: 方法中,将您的行替换为

selectedRow = row;

然后在 doneButtonTapped: 方法中,添加行

self.textFieldCategory.text = _pickerData[selectedRow];