2010-10-24 3 views
0

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

[[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 будет добавлен и в некоторые другие ячейки. Как я могу это исправить?


+0

Почему вы не добавляете его в cell.contentView вместо ячейки и почему вы добавляете ячейку в self.view? – Anna

+0

Я пытался это сделать, но он все еще появляется в других ячейках. – MKDev

+0

Если вы хотите его только в определенных ячейках, где ваше if-условие, чтобы проверить, нужно ли вставлять текущую ячейку или нет? – Anna

ответ

0

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

- (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-го раздела, так что пример написан таким образом. При необходимости измените.

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