我将 UIPickerView
与 UITextField
结合使用,将值输入到文本字段中。 pickerView 显示一系列数字,其中每个数字都相当于选择器 View 中的行。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: NSInteger)component
{
return self.max + 1;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [NSString stringWithFormat:@"%d", row];
}
当用户在选取器中选择一个值时,文本字段应反射(reflect)该值:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{
self.quantityField.text = [NSString stringWithFormat:@"%d", row];
}
但是,我注意到如果我将选择器旋转得太快,传递给 didSelectRow
的行偶尔会与选择器中确定的行不匹配。关于为什么会发生这种情况以及如何防止这种情况有什么想法吗?
其中带有 6 的字段代表我的 UITextField
。如您所见,选择器在 10 处结算。
我的完整设置如下:
我有一个带有许多自定义 UITableViewCells
的 UITableView
。
每个单元格都有一个 UITextField
,它由 self.quantityField
引用。
我设置了以下内容:
// pickerView represents the UIPickerView.
self.quantityField.inputView = self.pickerView;
UIToolbar *myToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0,_pickerView.frame.origin.y - 44, self.frame.size.width, 44)];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(inputAccessoryViewDidFinish)];
doneButton.tintColor = [UIColor clearColor];
[myToolbar setItems:[NSArray arrayWithObject: doneButton] animated:NO];
self.quantityField.inputAccessoryView = myToolbar;
为了确保在单击完成按钮时关闭选择器 View ,我实现了以下功能(添加为 doneButton
的 action
。
- (void)inputAccessoryViewDidFinish
{
[self.quantityField resignFirstResponder];
}
每个选择器都设置为显示数字 0-10(11 行)。
最佳答案
i have added a repo of the same这工作得很好,猴子测试了它!
如果问题仍然存在,请根据您当前存在问题的应用程序对存储库进行更改,然后将进一步调查!
关于ios UIPickerView 滚动太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295401/