有很多这样的问题,但我相信我的案例是独一无二的。
我在内部点击文本框时会弹出一个选择器视图。用户在选择器视图中选择他们的位置,并将其放入文本框中。
当打开选择器视图时,滑块位于第一个元素上,但如果我单击完成按钮以最小化选择器视图,则不会选择任何元素(即您必须向下滚动并向上选择第一个元素)
我试过
[pickerView selectRow:0 inComponent:0 animated:YES];
以及它的各种组合,但它只将滑块放在该元素上,而不是实际选择它。
有些答案说要在viewDidLoad()方法中应用上面的代码,但不幸的是我从Web服务中提取位置数组而不能这样做。
理想情况下,我想工作 - 用户点击文本框,选择器视图正常弹出,如果在此时单击完成按钮,则选择第一个项目。
提前谢谢
答案 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];
}
}