1

我禁用MKMapViewUITableViewCell用户交互。当我滚动UITableViewCell它时,它会刷新所有MKMapViews.

我在这里阅读了其他答案,一个说不要使用dequeueReusableCellWithIdentifier(我不是),另一个说deallocmapView我正在使用 ARC)。我不想使用图像。

MKMapView当我滚动滚动视图时,我应该怎么做才能防止重新加载?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    //UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ANFeedCell"];
    ANFeedTableViewCell *cell = nil;
    if (cell == nil) {
        // Load the top-level objects from the custom cell XIB.
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ANFeedTableViewCell" owner:self options:nil];
        // Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
        cell = [topLevelObjects objectAtIndex:0];

        MKMapView *mapView = (MKMapView*)[cell viewWithTag:2];

        //Takes a center point and a span in miles (converted from meters using above method)        
        CLLocationCoordinate2D startCoord = CLLocationCoordinate2DMake(37.766997, -122.422032);
        MKCoordinateRegion adjustedRegion = [mapView regionThatFits:MKCoordinateRegionMakeWithDistance(startCoord, MilesToMeters(0.5f), MilesToMeters(0.5f))];
        [mapView setRegion:adjustedRegion animated:YES];


    }
return cell;
}
4

3 回答 3

4

问题是您正在为每个表格单元格初始化新单元格。所以你的 MapView 每次都会重置。

这也会导致内存问题,因为在表格中上下滚动几下会耗尽手机的内存。

坚持使用可重复使用的单元格,但每次都为单元格配置地图视图区域。

这是一个很好的示例,可以帮助您入门:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CustomCellIdentifier = @"MyCustomTableCell";
    ANFeedTableViewCell *cell = (ANFeedTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ANFeedTableViewCell"
                                                     owner:self options:nil];
        for (id oneObject in nib)
            if ([oneObject isKindOfClass:[CustomCell class]])
                cell = (ANFeedTableViewCell *)oneObject;
    }



    MKMapView *mapView = (MKMapView*)[cell viewWithTag:2];

    //Takes a center point and a span in miles (converted from meters using above method)
    CLLocationCoordinate2D startCoord = CLLocationCoordinate2DMake(37.766997, -122.422032);
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:MKCoordinateRegionMakeWithDistance(startCoord, MilesToMeters(0.5f), MilesToMeters(0.5f))];
    [mapView setRegion:adjustedRegion animated:YES];

    return cell;
}

这段代码的不同之处在于,每次显示单元格时都会配置地图视图,而不仅仅是在初始化时。当然,您应该更改代码以从数据源(即 NSArray)动态接受坐标。

于 2012-12-04T13:17:09.990 回答
0

只需使用@property 在头文件中创建一个uitableview 单元格全局对象,并将单元格分配给全局对象,如果单元格为nil。

然后每次进入 cellforrowatindexpath 检查对象是否为 nil 。如果不是 nil ,则返回全局对象。

//在类.h

@property (nonatomic, retain) UITableViewCell *mapCell;

//在 cellForRowAtIndexPath 中

if (mapCell == nil) {
                        allocate the cell
                    }
                    else{
                        return mapCell;
                    }
于 2013-09-18T13:00:44.407 回答
-1

试试这个

NSArray *views = [cell.contentView subviews];
    for( int i = 0; i < [views count]; i++)
    {
        UIView *tempView = [views objectAtIndex:i];
        [tempView removeFromSuperview];
        tempView = nil;
    }

    views = nil;
于 2012-12-04T11:27:11.387 回答