2013-09-16 6 views
0

У меня есть 3 раздела в виде таблицы и только в средней секции, раздел 2, для отображения различных ячеек. В разделах 1 и 3 показана только одна ячейка, и я делаю их непривлекательными, так как я хочу отображать на них кнопки и текст. Я сделал их, и он работал нормально, пока я не сделал разделы 1 и 3 userInteractionEnabled = NO.Взаимодействие с пользователем Включено изменение цвета текста и способности щелчка других разделов

Код: Я знаю, что могу сделать этот объект ориентированным, и это было так, но как только эта проблема возникла, я попытался сделать это по-другому, но это все равно.

-(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]; 
     UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:CGRectZero]; 
     selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.1]; 
     cell.selectedBackgroundView = selectedBackgroundView; 
     if(cell==nil) { NSLog(@"Cell is nil");} 
    } 

    if(indexPath.section == 0) 
    { 
     cell.textLabel.text = nil; 
     cell.accessoryView = nil; 
     cell.detailTextLabel.text = nil; 
     dosageButton       = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     amountButton       = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [dosageButton addTarget:self action:@selector(showDosages:) forControlEvents:UIControlEventTouchUpInside]; 
     [amountButton addTarget:self action:@selector(showAmount) forControlEvents:UIControlEventTouchUpInside]; 
     [self.view addSubview:dosageButton]; 
     [self.view addSubview:amountButton]; 
     cell.userInteractionEnabled = NO; 
     return cell; 
    } 

    else if (indexPath.section == 1) 
    { 
     if (self.nameMutable.count != 0) 
     { 
      cell.textLabel.text = [self.nameMutable objectAtIndex:indexPath.row]; 
      cell.detailTextLabel.text = [NSString stringWithFormat:@"$%@",[self.priceMutable objectAtIndex:indexPath.row]]; 
      cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron"]]; 
      return cell; 
     } 
     else 
     { 
      //Empty for now. Waiting for data fetching to finish 
      return cell; 
     } 
    } 
    else if (indexPath.section == 2) 
    { 
     cell.userInteractionEnabled = NO; 
     cell.accessoryView = nil; 
     cell.detailTextLabel.text = nil; 
     return cell; 
    } 
    else 
    { 
     NSLog(@"Something went wrong"); 
     return cell; 
    } 

} 

По какой-то причине мой стол вид ячейки в разделе 1, где предполагается быть кликабельна цвет меняется на темно-серый и не кликабельны больше. Обычно это ячейка 3 и ячейка 10. Кроме того, когда я прокручиваю вниз, а раздел 0 больше не отображается, а затем я прокручиваю назад, а раздел 0 виден, некоторые из ячеек становятся неаккуруемыми и цвет текста изменяется.

Кроме того, как я могу создать определенную ячейку внутри раздела 1, имеют большую высоту, потому что текст слишком длинный для отображения, и он начинает отображать «...» или охватывает детальную тексту. Заранее спасибо.

ответ

0

Вы должны помнить, что эти клетки повторного использования или «переработаны», так что если вы устанавливаете userInteractionEnabled=NO для if заявления вам необходимо установить его userInteractionEnabled=YES в вашем else заявлении, или установить его в качестве YES, прежде чем все ваши заявления , Вы также хотите убедиться, что вы добавляете какие-либо другие подсмотры (кнопки и т. Д.), Которые являются уникальными для определенных указательных путей для вновь созданных ячеек, где вы будете придерживать этот фрагмент кода в своем заявлении if(cell==nil). Что-то вроде этого:

-(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]; 
     UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:CGRectZero]; 
     selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.1]; 
     cell.selectedBackgroundView = selectedBackgroundView; 
     if(indexPath.section == 0) { 
      dosageButton       = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
      amountButton       = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
      [dosageButton addTarget:self action:@selector(showDosages:) forControlEvents:UIControlEventTouchUpInside]; 
      [amountButton addTarget:self action:@selector(showAmount) forControlEvents:UIControlEventTouchUpInside]; 
      [self.view addSubview:dosageButton]; 
      [self.view addSubview:amountButton]; 
     } 

     if(cell==nil) { NSLog(@"Cell is nil");} 
    } 

    cell.userInteractionEnabled = YES; 
    cell.accessoryView = nil; 
    cell.textLabel.text = nil; 
    cell.detailTextLabel.text = nil; 

    if(indexPath.section == 0) 
    { 
     cell.userInteractionEnabled = NO; 
    } 

    else if (indexPath.section == 1) 
    { 
     if (self.nameMutable.count != 0) 
     { 
      cell.textLabel.text = [self.nameMutable objectAtIndex:indexPath.row]; 
      cell.detailTextLabel.text = [NSString stringWithFormat:@"$%@",[self.priceMutable objectAtIndex:indexPath.row]]; 
      cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron"]]; 
     } 
     else 
     { 
      //Empty for now. Waiting for data fetching to finish 
     } 
    } 
    else if (indexPath.section == 2) 
    { 
     cell.userInteractionEnabled = NO; 
    } 
    else 
    { 
     NSLog(@"Something went wrong"); 
    } 
    return cell; 
} 

И если вы хотите, чтобы изменить высоту некоторых индексных путей (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath метода Docs делегата.

+0

Зачем вам помещать раздел 0 внутри оператора if, когда вы делаете ячейки? ('if (cell == nil) {раздел 0 здесь}'?) – Chris

+0

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

+0

Я пробовал делать это, но камера и кнопка не загружались, вот почему я спрашивал. Любая подсказка, почему она не появляется? – Chris

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

  • Нет связанных вопросов^_^