UIPickerView:有没有办法阻止用户滚动过去某一行?
问题描述:
我正在寻找一种方法来阻止UIPickerView
一旦遇到特定行就进一步向下滚动。它仍然可以向上滚动,但不会下降。我想在点击第三行时执行此操作。这里是代码:UIPickerView:有没有办法阻止用户滚动过去某一行?
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog(@"You selected this: %@", [dataArray objectAtIndex: row]);
selected= row;
NSLog(@"selected %i",selected);
self.textField.text = [dataArray objectAtIndex: row];
if (row = 3){
// stop scrolling any lower.
}
}
如果您有任何问题,请让我知道。我很感激我得到的任何帮助或提示。
答
试试这个:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog(@"You selected this: %@", [dataArray objectAtIndex: row]);
selected= row;
NSLog(@"selected %i",selected);
self.textField.text = [dataArray objectAtIndex: row];
if (row > 2){
[pickerView selectRow:2 inComponent:component animated:YES];
}
}
答
创建一个属性来跟踪用户是否选择行3(具有指数为2)让我们把它叫做row3Selected这个例子。
if (row == 2){
self.row3Selected = YES;
[self.pickerView reloadAllComponents];
}
修改您的numberOfRowsInComponent:方法是这样的:
- (NSInteger)numberOfRowsInComponent:(NSInteger)component {
if (self.row3Selected) {
return 3;
}else{
return myArray.count // myArray is the array used to populate the picker with data
}
}
这将导致你的选择器只显示在您的数据源中的第3个对象。
这不会阻止用户向下滚动 - 当纺纱停止时,它将使其跳回第2行。 – rdelmar