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]; 
    } 
} 
+0

这不会阻止用户向下滚动 - 当纺纱停止时,它将使其跳回第2行。 – rdelmar

创建一个属性来跟踪用户是否选择行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个对象。