2013-09-16 4 views
0

Я создал приложение, которое использует некоторые функции карт. Я добавил MKMapView в UITableViewCell и WebView в другой uiTableviewcell (мне это нужно, потому что он выглядит элегантно). Я создал свои собственные ячейки. Моего UITableView делегат и DataSource методы: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 и для отображения некоторых аннотаций на карте. Проблема заключается в том, что когда пользователь меняет ориентацию и прокручивает данные таблицы, представление таблицы автоматически перезагружает данные (у меня есть мой веб-просмотр и Карта, которые воссозданы и ничего не отображаются). Как решить эту проблему? Может быть, я могу сохранить состояние tableviewcell ?? Но как это сделать?

ответ

7

Проблема в том, что вы пытаетесь сохранить данные в ячейках просмотра таблицы, но они управляются табличным представлением. Они не только перезагружаются по мере необходимости, но также повторно используются, когда они исчезают с экрана.
Решение состоит в том, что вы должны хранить данные в своей модели данных, объект, который не зависит от вида таблицы. В представлении таблицы загружаются только данные из вашей модели для отображения.

+2

Этот раз 1000. Если бы я мог голосовать на этот раз я пять бы. Все время люди хранят данные в представлении. Нехорошо. – Fogmeister

2

положить это условие в момент выделения ячейки

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

вид таблицы перезагружает данные автоматически, так как, когда и прокручивает она освобождает клетку

+0

Большое спасибо! – PAcan

Смежные вопросы