UITableView使用UIPIckerView滚动到特定部分?

时间:2013-12-11 01:20:32

标签: objective-c uitableview uipickerview

我有一个具有固定数量的部分的UITableView,但是每个部分中的行数可能因服务器结果而异。

我想实现一个拣选轮来“跳”到每个部分。以下是UITableViewController中的UIPickerView委托方法:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 1;

}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return 5;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [self.pickerArray objectAtIndex:row];
}

在ViewDidLoad中初始化的“pickerArray”:

self.pickerArray = [[NSArray alloc]initWithObjects:@"Watching", @"Completed", @"On Hold", @"Dropped", @"Planned", nil];

这是我的didSelectRow方法:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
[self.tableView scrollToRowAtIndexPath:[self.pickerArray objectAtIndex:row] atScrollPosition:UITableViewScrollPositionNone  animated:YES];
}

我注意到没有“scrollTo * section * AtIndexPath”方法,这会有所帮助。 Apple的文档说这是关于“indexpath”参数:

indexPath
An index path that identifies a row in the table view by its row index and its section index.

调用方法(在选择器中拾取内容)会引发此错误:

  

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFConstantString   section]:无法识别的选择器发送到实例0x4bdb8'

知道我应该做什么吗?

1 个答案:

答案 0 :(得分:5)

scrollToRowAtIndexPath方法将NSIndexPath作为第一个参数,但代码正在传递NSString,从而导致异常。

正如文档所说,NSIndexPath包括一个部分和一行(您必须知道这一点,因为您填充了包含部分的表格视图)。

您需要创建一个NSIndexPath,该row对应于表格视图中与在选择器视图中选择的row相关的部分的第一行。

假设选择器视图的//"row" below is row selected in the picker view NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:row]; [self.tableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionNone animated:YES]; 直接对应于表视图中的部分:

{{1}}