0

我的问题很明确,

我有一个带有注释的 UITableView 和 UIMapView,当在地图上点击注释时,它将在表格上找到并被选中,因为用户可以识别它。

但是,如果我尝试一些仅在可见单元格中的东西,我将无法按预期进行。

 - (void)annotationTapped:(UITapGestureRecognizer *)recognizer{
    if ( recognizer.state == UIGestureRecognizerStateEnded ) {

    //NSLog(@"%@",[recognizer.view subviews]);

    UIImageView *temp = (UIImageView*)[recognizer.view viewWithTag:1000];

    UILabel *temp2 = (UILabel*)[temp viewWithTag:1001];

    NSArray *tapAndFind;


    if(isFiltered)
    {
        tapAndFind = filteredListContent;
    }
    else
    {
        tapAndFind = eczaneler;
    }

    for(int i=0;i<tapAndFind.count;i++)
    {

        Pharma *tempPharm = [tapAndFind objectAtIndex:i];

       if([tempPharm.CustomerIndex isEqualToString:temp2.text])
       {               
           EczaneCell *cell = (EczaneCell*)[tableView1 cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];




           for(EczaneCell * cell2 in [tableView1 visibleCells])
           {
               cell2.selected = NO;
           }


           cell.selected = YES;

           NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[tableView1 indexPathForCell:cell].row
                                                       inSection:[tableView1 indexPathForCell:cell].section];

           [tableView1 scrollToRowAtIndexPath:indexPath
                                                 atScrollPosition:UITableViewScrollPositionTop animated:YES];

           } 
        }

    }
}
4

1 回答 1

1

这是因为您UITableView只是数据的呈现,而不是数据本身。因此,当您点击注释时,您应该以某种方式找到与数据的对应关系,即您的注释数据在集合中的位置。然后您可以计算/找出表中行的索引,然后您可以执行UITableView's scrollToRowAtIndexPath:atScrollPosition. 或者,您可以标记单元格以使其可区分。

在您的代码中

EczaneCell *cell = (EczaneCell*)[tableView1 cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];

当给定索引路径的单元格不可见时,可以返回nilcell这就是为什么您应该检查数据,而不是表格单元格。

于 2013-09-10T06:33:10.090 回答