MPVolumeView появляется в других ячейках - PullRequest
0 голосов
/ 25 октября 2010

Я использую приведенный ниже код для реализации представления объема в ячейке.

[[cell detailTextLabel] setText: @""];
  MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: CGRectMake(100, 10, 200, 100)];
  [cell addSubview: systemVolumeSlider];
  [self.view addSubview:cell];
  [systemVolumeSlider release];
  //[MPVolumeView release];

Однако у меня есть проблема с ним.Всякий раз, когда я прокручиваю вверх или вниз в табличном представлении, MPVolumeView также добавляется в некоторые другие ячейки.Как я мог это исправить?


1 Ответ

0 голосов
/ 26 октября 2010

Как упоминалось в комментариях, ячейка с регулятором громкости может повторно использоваться для ячеек, не относящихся к объему, поэтому ее необходимо удалить, если она уже существует.Пример того, как это можно сделать:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

    //remove the volume control (which we tagged as 10) if it already exists...
    UIView *v = [cell.contentView viewWithTag:10];
    [v removeFromSuperview];

    cell.textLabel.text = @"some text";

     if (indexPath.section == 7) 
     { 
        if (indexPath.row == 1) 
        { 
            cell.detailTextLabel.text = @""; 
            MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame:CGRectMake(100, 10, 200, 100)];
            //set a tag so we can easily find it (to remove it)...
            systemVolumeSlider.tag = 10;  
            [cell.contentView addSubview:systemVolumeSlider]; 
            [systemVolumeSlider release]; 
            return cell; 
        }
     }

    cell.detailTextLabel.text = @"detail";

    return cell;
}

В ваших комментариях кажется, что регулятор громкости должен находиться только во 2-й строке 8-го раздела, поэтому пример написан таким образом.Изменить по необходимости.

...