2016-05-02 3 views
1

Я добавил три UIButtons к каждой строке UITableViewCell.Обновление содержимого UITableviewcell

Когда я выбираю UIButton, он меняет цвет на черный. Проблема заключалась в том, что изменения цвета были затронуты кнопками другой ячейки в таблице, которую я только видел, когда прокручиваю вниз по таблице.

ссылку также объяснить тот же проблемно>UITableviewcell content updating reflects to other cell

я не мог найти ответ на эту проблему в IOS.

это мой cellForRowAtIndexPath

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"]; 

    UIButton *btn1=[cell viewWithTag:101]; 
    btn1.imageView.contentMode = UIViewContentModeScaleAspectFit; 
    [btn1 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    btn1.backgroundColor=[UIColor clearColor]; 
    [btn1 setTag:(indexPath.row*3)+1]; 

    UIButton *btn2=[cell viewWithTag:102]; 
    btn2.imageView.contentMode = UIViewContentModeScaleAspectFit; 
    [btn2 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    btn2.backgroundColor=[UIColor clearColor]; 
    [btn2 setTag:(indexPath.row*3)+2]; 

    UIButton *btn3=[cell viewWithTag:103]; 
    btn3.imageView.contentMode = UIViewContentModeScaleAspectFit; 
    [btn3 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    btn3.backgroundColor=[UIColor clearColor]; 
    [btn3 setTag:(indexPath.row*3)+3]; 
rerutn cell; 

это я моя кнопка метод действия

- (IBAction)btnClicked:(id)sender 
{ 
    UIButton *button=(UIButton *)sender; 
    NSLog(@"tag %ld",(long)button.tag); 
    if(button.backgroundColor==[UIColor blackColor]){ 
     button.backgroundColor=[UIColor clearColor]; 

    } 
    else if(button.backgroundColor==[UIColor clearColor]){ 
     button.backgroundColor=[UIColor blackColor]; 
    } 
} 

Nothin фантазии в этом коде. Как я могу решить эту проблему программно .. Спасибо ..!

+0

Возможный дубликат [UITableViewCell обновления контента отражает в другой ячейке] (http://stackoverflow.com/questions/14278144/uitableviewcell-content-updating-reflects-to-other-cell) – Avi

+0

Да. У вас есть какие-то решения ??? – gamal

+0

Используйте то же самое в cellforrowatindex, которое вы сделали в IBAction –

ответ

0

Это потому, что UITableView повторно использует ячейки вместо создания новых ячеек. Предположим, вы изменили цвет своей ячейки с индексом 2, поэтому, когда UITableView будет повторно использовать эту ячейку, она покажет ранее созданную ячейку с измененной кнопкой цвета.

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

+0

, поэтому любые решения? – gamal

+0

Вы используете файлы раскадровки или файлы nib для создания своей ячейки или создаете ячейки в коде? –

+0

Я использовал StoryBoard ..будет ли он разрешен, если я создам ячейку программно – gamal

1

Заменить

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"]; 

С

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell" forIndexPath:indexPath]; 

     if (cell == nil){ 

      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"custCell"]; 
     } 

Надеется, что это поможет :)

+0

было такое же, как раньше. не выполняются никакими. проблема satay как же – gamal

-1

В cellForRowatIndexPth вместо этой линии

btn1.backgroundColor = [UIColor clearColor] ;

Использование ниже Кодекса

if (btn1.isSelected) { 
    btn1.backgroundColor=[UIColor clearColor]; 
} 
else{ 
    btn1.backgroundColor=[UIColor blackColor]; 
} 

В IBAction использовать

UIButton *button=(UIButton *)sender; 
if(button.backgroundColor==[UIColor blackColor]){ 
    button.backgroundColor=[UIColor clearColor]; 
    [button setSelected:YES]; 
} 
else{ 
    button.backgroundColor=[UIColor blackColor]; 
    [button setSelected:NO]; 
} 
+0

это не сработало. Я уже изменяю цвет кнопки, когда она создается viewWithTag. – gamal

+0

Вместо вызова значений тегов yu вы можете добавить subview в ячейки илиElse, вы можете использовать подклассы tableviewcell –

1

сделать UITableViewCell и добавить UIButton и маркировать их с раскадровки.

@interface TblCellCategoryCell:UITableViewCell 

@property (weak, nonatomic) IBOutlet UIButton *btn1; 
@property (weak, nonatomic) IBOutlet UIButton *btn2; 
@property (weak, nonatomic) IBOutlet UIButton *btn3; 

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