选择超过特定数字的行时,与UITableView一起使用的索引路径无效

时间:2012-01-02 08:52:23

标签: xcode uitableview

- (int)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:   (NSInteger)section
{
return @"Substitutes";
}

- (int)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{

int cnt=[subArray count];
return [subArray count];
}

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath    *)indexPath
{
NSArray *visible = [tableView indexPathsForVisibleRows];

NSIndexPath *indexpath = (NSIndexPath*)[visible objectAtIndex:0];


if ((selectedIndexPath != nil) && (selectedIndexPath.row == indexPath.row)){


    NSUInteger row = [indexPath row];

    NSString *subtitle =[[subArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    NSString *subDet =[[subDetArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    int height =  [self heightOfCellWithTitle:subtitle andSubtitle:subDet];
    return(height < CONST_Cell_height ? CONST_Cell_height : height);


}

return 40.0;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
static NSString *CellIdentifier = @"SearchCell";
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
if ((selectedIndexPath != nil) && (selectedIndexPath.row == indexPath.row)){
    cell = [self CreateMultilinesCell:CellIdentifier];

    cell.textLabel.text=[[subArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    cell.detailTextLabel.text =[[subDetArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    return cell;        
} else {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

    cell.textLabel.text=[[subArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    cell.detailTextLabel.text =[[subDetArray objectAtIndex:row] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    return cell; 
 }

}

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (selectedIndexPath == indexPath) {
    selectedIndexPath = nil;
    [table reloadData];
} else {
    selectedIndexPath = indexPath;
    //static NSString *CellIdentifier = @"Cell";
    //UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    //cell.textLabel.text=@"test";
    //cell.detailTextLabel.text =@"det Test";
    [table reloadData];
}
 [self.table deselectRowAtIndexPath : indexPath animated : NO];
 [tableView beginUpdates];
 [tableView endUpdates];

}

我使用上面的代码实现了表视图。当我选择行号时。 26伏或更高 扩展选择,但下次点击不收缩。&amp;给我滚动错误

NSInternalInconsistencyException',原因:'与UITableView一起使用的索引路径无效。传递给表视图的索引路径必须包含指定节和行的两个索引。如果可能,请在UITableView.h中使用NSIndexPath上的类别。'

代码平滑地工作25行。哪里出错了?

2 个答案:

答案 0 :(得分:2)

我最终得到了它。:) selectedIndexpath给了垃圾。我用self.selectedIndexpath替换它。 我没有得到它为什么这样做的记录没有。 25开始。但这对我有用

答案 1 :(得分:2)

像这样使用

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag-1 inSection:0];

CGRect rectOfCellInTableView = [objTableView rectForRowAtIndexPath:indexPath];

CGRect rectOfCellInSuperview = [objTableView convertRect:rectOfCellInTableView toView:[objTableView superview]];