我的问题很明确,
我有一个带注释的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];
}
}
}
}
答案 0 :(得分:1)
这是因为您的UITableView
只是数据的呈现,而不是数据本身。因此,当您点击注释时,您应该以某种方式找到与数据的对应关系,即注释数据在集合中的位置。然后你可以计算/找出表格中的行索引,然后你可以执行UITableView
的{{1}}。或者,您可以标记单元格以使其可区分。
在您的代码中
scrollToRowAtIndexPath:atScrollPosition
当给定索引路径的单元格不可见时,可以为EczaneCell *cell = (EczaneCell*)[tableView1 cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
返回nil
。这就是你应该检查数据而不是表格单元格的原因。