1

ユーザー操作が無効MKMapViewになっています。UITableViewCellをスクロールするUITableViewCellと、すべてが更新されますMKMapViews

私はここで他の回答を読みました.1つは使用しないと言いdequeueReusableCellWithIdentifier(私は使用しません)、もう1つは使用すると言いdeallocます(mapView私は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

問題は、すべてのテーブル セルに対して NEW セルを初期化していることです。したがって、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;
}

このコードの違いは、セルが初期化されるときだけでなく、セルが表示されるたびに mapview が構成されることです。もちろん、データソース (つまり NSArray) から動的に座標を受け入れるようにコードを変更する必要があります。

于 2012-12-04T13:17:09.990 に答える
0

ヘッダー ファイルで @property を使用して uitableview セル グローバル オブジェクトを作成し、セルが nil の場合はセルをグローバル オブジェクトに割り当てるだけです。

その後、 cellforrowatindexpath を入力するたびに、オブジェクトが nil かどうかを確認します。nil でない場合は、グローバル オブジェクトを返します。

//class.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 に答える