15

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

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

打开pickerview时,滑块位于第一个元素上,但是如果我单击完成按钮以最小化pickerview,则没有选择任何元素(即您必须向下滚动并返回才能选择第一个元素)

我试过了

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

以及它的各种组合,但它只将滑块放在该元素上,同样没有实际选择它。

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

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

先感谢您

4

5 回答 5

14

斯威夫特 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

}
于 2016-10-03T18:51:41.627 回答
5

您可以尝试以下方法:

在你的 var 中设置一个 var @interface,比如NSString *selectedString;.

当您初始化UIPickerView(in 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设置文本。

希望这对你有用!

于 2013-01-30T13:42:26.850 回答
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

}
于 2014-12-04T15:35:56.173 回答
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
}
于 2015-02-03T11:55:31.657 回答
0

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

-(IBAction)asignFirst:(UITextField *)sender{
if ([sender.text isEqualToString:@""])
{
    [yourPicker selectRow:0 inComponent:0 animated:YES]; 
    sender.text = self.pickerData[0];
   }
}
于 2014-11-21T20:41:14.090 回答