2013-09-24 4 views
1

В моем приложении я задаю некоторый вопрос в NSMutableArray и отобразив строку tableView. Я взял две кнопки под каждый вопрос (кнопка таблицы таблицы). Нажав кнопку YES и NO, цвет TableRow изменится на зеленый, желтый соответственно.UITableView Изменения цвета ячейки при запросе прокрутки

Проблема заключается в том, что после нажатия кнопки в определенном ряду строка становится зеленой. Но после прокрутка нежелательные ячейки также становятся зелеными/желтыми.

Не могли бы вы проверить мой код, приведенный ниже, и предложить

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

contentView.hidden = YES; 
if(tableView == myChklist) 
{ 

    static NSUInteger const kQuestLabelTag = 1; 
    static NSUInteger const kYesButtonTag = 2; 
    static NSUInteger const kNoButtonTag = 3; 

    UILabel *QuestLabel = nil; 
    UIButton *YesButton; 
    UIButton *NoButton; 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     cell.selectionStyle = UITableViewCellSelectionStyleNone;   //cell bg 
     //self.myChklist.backgroundColor = [UIColor clearColor]; 
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     { 

      QuestLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,5,768,0)]; 

      //some logic code 
      [cell.contentView addSubview:QuestLabel]; 


      NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ; 
      CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; 

      UIButton *YesButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

          //some logic button code 

      [cell.contentView addSubview:YesButton]; 

      UIButton *NoButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
      //some logic button code 

      [cell.contentView addSubview:NoButton]; 



    } 
    else 

    { 

     QuestLabel = (UILabel *)[cell.contentView viewWithTag:kQuestLabelTag]; 
     YesButton = (UIButton *)[cell.contentView viewWithTag:kYesButtonTag]; 
     NoButton = (UIButton *)[cell.contentView viewWithTag:kNoButtonTag]; 


    } 


    QuestLabel.text = [buildingQuest objectAtIndex:indexPath.row]; 

    QuestLabel.numberOfLines = 0; 

    NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; 
     CGRect rect = QuestLabel.frame; 
     rect.size.height = titleSize.height+10; 
     QuestLabel.frame = rect; 

     YesButton.frame = CGRectMake(10,titleSize.height+15,60,30); 
     NoButton.frame = CGRectMake(95,titleSize.height+15,60,30); 

    } 


if([self getCheckedForIndex:indexPath.row]==YES) 
    { 
     cell.backgroundColor = [UIColor greenColor]; 
     Cam_Button.hidden = NO; 

    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 


    if([self getCheckedForYellow_Index:indexPath.row]==YES) 
    { 
     cell.backgroundColor = [UIColor yellowColor]; 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 


    return cell; 

    } 
} 

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 


if([self getCheckedForIndex:indexPath.row]==YES) 
{ 
    cell.backgroundColor = [UIColor greenColor]; 
    Cam_Button.hidden = NO; 

} 
if([self getCheckedForYellow_Index:indexPath.row]==YES) 
{ 
    cell.backgroundColor = [UIColor yellowColor]; 
} 


if ([self.arrayCheckUnchek containsObject:indexPath]) 
{ 
    cell.backgroundColor = [UIColor greenColor]; 
    Cam_Button.hidden = NO; 

} 

    if ([arrayCheckUnchek2 containsObject:indexPath]) 
    { 
     cell.backgroundColor = [UIColor yellowColor]; 
    } 

} 



- (void)tableView: (UITableView*)tableView 
willDisplayCell: (UITableViewCell*)cell 
forRowAtIndexPath: (NSIndexPath*)indexPath 
{ 
UITableViewCell *Cell = [myChklist cellForRowAtIndexPath:indexPath]; 
//same code as didSelectRowAtIndexPath method 

} 



-(void)NoAction:(id)sender event: (id)event 
{ 
_cellButtonPress = YES; 
checkUncheck = YES; 
NSSet *touches = [event allTouches]; 
UITouch *touch = [touches anyObject]; 
CGPoint currentTouchPosition = [touch locationInView:self.myChklist]; 
NSIndexPath *indexPath = [self.myChklist indexPathForRowAtPoint: currentTouchPosition]; 
UIButton *button = (UIButton *)sender; 
UITableViewCell *cell = (UITableViewCell *)button.superview.superview; 

cell.backgroundColor = [UIColor yellowColor]; 
[self checkedCellAtYellow_Index:indexPath.row]; 

[arrayCheckUnchek2 addObject:indexPath]; 
} 

ответ

1

Вы должны установить цвет фона вновь выделенных ячеек. Если вы этого не сделаете, тогда, когда клетки, которые стали зелеными, повторно используются, они остаются зелеными.

if (cell == nil) { 
     cell.backgroundColor = [UIColor clearColor]; 
     ... 
+0

Я сделал ... еще не успел. –

+0

Выполнено :) Ваше решение + настройка [self.myChecklist reloadData] в действии кнопки. –

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