UIPickerView以编程方式选择第一行

时间:2013-01-30 13:28:43

标签: ios xcode uipickerview

有很多这样的问题,但我相信我的案例是独一无二的。

我在内部点击文本框时会弹出一个选择器视图。用户在选择器视图中选择他们的位置,并将其放入文本框中。

当打开选择器视图时,滑块位于第一个元素上,但如果我单击完成按钮以最小化选择器视图,则不会选择任何元素(即您必须向下滚动并向上选择第一个元素)

我试过

    [pickerView selectRow:0 inComponent:0 animated:YES];

以及它的各种组合,但它只将滑块放在该元素上,而不是实际选择它。

有些答案说要在viewDidLoad()方法中应用上面的代码,但不幸的是我从Web服务中提取位置数组而不能这样做。

理想情况下,我想工作 - 用户点击文本框,选择器视图正常弹出,如果在此时单击完成按钮,则选择第一个项目。

提前谢谢

5 个答案:

答案 0 :(得分:10)

Swift 3 +

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField == yourTextField{
        self.yourPickerView.selectRow(0, inComponent: 0, animated: true)
        self.pickerView(yourPickerView, didSelectRow: 0, inComponent: 0)
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

//Do all the stuff to populate the TextField

}

答案 1 :(得分:5)

您可以尝试以下方法:

@interface中设置var,类似于NSString *selectedString;

当您初始化UIPickerView(在pickerView:titleForRow:forComponent:中)时,当您为行0设置标题时,请将selectedString设置为与行#0的标题相同的字符串。然后,在pickerView:didSelectRow:inComponent:中,使用适当的字符串设置selectedString

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    // Some stuff

    // Assuming "yourDataArray" contains your strings
    selectedString = [yourDataArray objectAtIndex:row];

}

然后,当您通过按下“完成”按钮调用触发的方法时,请使用selectedString设置文本。

希望这对你有用!

答案 2 :(得分:4)

我遇到了同样的问题。我的解决方案是:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // Only for the text field with the picker
    if (textField == self.yourTextField)
    {
        // Select the first row programmatically 
        [self.categoriesPicker selectRow:0 inComponent:0 animated:YES];
        // The delegate method isn't called if the row is selected programmatically
        [self pickerView:self.categoriesPicker didSelectRow:0 inComponent:0];
    }



}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    //Do all the stuff to populate the TextField

}

答案 3 :(得分:3)

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // Only for the text field with the picker
    if (textField == self.yourTextField && [textField length]!=0)
    {
        // Select the first row programmatically 
        [self.categoriesPicker selectRow:0 inComponent:0 animated:YES];
        // The delegate method isn't called if the row is selected programmatically
        [self pickerView:self.categoriesPicker didSelectRow:0 inComponent:0];
    }



}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    //Do all the stuff to populate the TextField
}

答案 4 :(得分:0)

/ 为文本字段创建一个IBACTION,事件编辑确实开始,该函数应该检查字段是否为空 /

-(IBAction)asignFirst:(UITextField *)sender{
if ([sender.text isEqualToString:@""])
{
    [yourPicker selectRow:0 inComponent:0 animated:YES]; 
    sender.text = self.pickerData[0];
   }
}