0

我创建了一个使用一些地图功能的应用程序。我已经将 MKMapView 添加到 UITableViewCell 和 WebView 到另一个 uiTableviewcell(我需要这个,因为它看起来很优雅)。我已经创建了我的自定义单元格。我的 uitableview 委托和数据源方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger section = indexPath.section;
    switch (section)
    {
        case 0:
            return [self cellForMapView];
        case 1:
            return [self cellForUIWebView];
    }
    return nil;
}

-(UITableViewCell *)cellForMapView
{
    //if (_mapViewCell)
       // return _mapViewCell;

    // if not cached, setup the map view...
    CGFloat cellWidth = self.view.bounds.size.width - 20;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        cellWidth = self.view.bounds.size.width - 90;
    }

    CGRect frame = CGRectMake(0, 0, cellWidth, 241);
    _mapView = [[MKMapView alloc] initWithFrame:frame];

    _mapView.showsUserLocation = YES;
    _mapView.userLocation.title = @"Текущее местоположение";
    _mapView.mapType = MKMapTypeStandard;
    _mapView.zoomEnabled = YES;

    NSString * cellID = @"Cell";
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID] autorelease];
    [cell.contentView addSubview:_mapView];

    _mapViewCell = cell;

    return cell;
}



/*
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
 return 50.0f;
 } */

-(UITableViewCell *)cellForUIWebView
{
    //if (_webViewCell)
       // return _webViewCell;

    CGFloat cellWidth = self.view.bounds.size.width - 20 ;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        cellWidth = self.view.bounds.size.width - 90;
    }

    CGRect frame = CGRectMake(0, 0, cellWidth, 241);
    _webView = [[UIWebView alloc] initWithFrame:frame];

    NSString * cellID = @"Cell";
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID]autorelease];

    [cell.contentView addSubview:_webView];

    _webViewCell = cell;
    return cell;
}

我正在将一些数据下载到 webview 并在地图上显示一些注释。问题是当用户改变方向并滚动表格视图数据时,表格视图会自动重新加载数据(我的 webview 和地图被重新创建并且什么都不显示)。如何解决这个问题?也许我可以保存 tableviewcell 的状态?但是怎么做呢?

4

2 回答 2

7

问题是您试图将数据存储在表格视图单元格中,但这些是由表格视图管理的。它们不仅会根据需要重新加载,而且会在它们从屏幕上消失时重新使用。
解决方案是您必须将数据存储在数据模型中,这是一个独立于表视图的对象。然后,表格视图仅从您的模型加载数据以进行显示。

于 2013-09-16T05:06:17.417 回答
1

把这个条件放在分配单元格的时候

if ( ! cell ) {
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID]autorelease];
}

表格视图会自动重新加载数据,因为当您滚动时它会释放单元格

于 2013-09-16T10:45:00.387 回答