2013-12-05 2 views
3

У меня есть обычай UITableView с пользовательским UITableViewCell он содержит UIButton я хочу, чтобы изменить фоновое изображение выбранной кнопки, когда пользователь выбирает его,Пользовательское UITableViewCell с UIButton: невозможно изменить UIImage

К сожалению, изображение не меняется состояние всякий раз, когда я нажимаю его, и он показывает:

Нагрузочный приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина: «- [UIView setBackgroundImage: Форстате]:

Вот мой фрагмент кода:

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    static NSString *CellIdentifier = @"BTSTicketsCellIdentifier"; 
    CRIndCategCell *cell = (CRIndCategCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     //Initialize cell 
    } 

    cell.favBtn.tag=indexPath.row; 
    [cell.favBtn addTarget:self action:@selector(AddToFav:) forControlEvents:UIControlEventTouchUpInside]; 

     ... 
     ... 
     ... 

} 

-(IBAction)AddToFav:(id)sender{ 
    NSLog(@"Value of selected button = %ld",(long)[sender tag]); 

    UIButton *Btn=(UIButton*)[self.view viewWithTag:(long)[sender tag]]; 
    [Btn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; 
    [Btn setBackgroundImage:[UIImage imageNamed:@"grey-star.png"] forState:UIControlStateNormal]; 


} 

Мой журнал показывает Значение выбранной кнопки правильно, но не может изменить изображение кнопки

Спасибо за чтение.

ответ

4

Попробуйте изменить ваш метод AddToFav: к:

-(IBAction)AddToFav:(UIButton *)sender{ 
    NSLog(@"Value of selected button = %ld",(long)[sender tag]); 

    [sender setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; 
    [sender setBackgroundImage:[UIImage imageNamed:@"grey-star.png"] forState:UIControlStateNormal]; 


} 

Или используйте:

-(IBAction)AddToFav:(UIButton *)sender{ 
    NSLog(@"Value of selected button = %ld",(long)[sender tag]); 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    for (UIButton *btn in [cell.contentView.superview subviews]) { 
     if ([btn isKindOfClass:[UIButton class]]&& btn.tag ==(long)[sender tag]) { 
      [btn setBackgroundImage:[UIImage imageNamed:@"grey-star.png"]  
     } 
    } 
} 
+0

Ах да чувак это работает, спасибо – Krunal

0

Проверьте, является ли тег кнопки == 0. Это тег по умолчанию для contentView UITableViewCell, и возможно, что вы пытаетесь изменить образ содержимого cellView.

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