2012-05-12 1 views
1

В моей cellForRowAtIndex я инициализировать кнопку (она получает, показанную в каждой клетке в Tableview):Кнопка предполагается изменить изображение после щелчка, но (в случайном порядке) изменения изображения других кнопок слишком

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button addTarget:self 
      action:@selector(customActionPressed:) 
forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"" forState:UIControlStateNormal]; 
button.frame = CGRectMake(0.0f,cell.frame.size.height -15, 160.0f, 15.0f); 
UIImage *buttonImage = [UIImage imageNamed:@"Image1.png"]; 
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
[button.titleLabel setFont:[UIFont fontWithName:@"Arial" size:13.0]]; 
button.contentEdgeInsets = UIEdgeInsetsMake(1, 60, 0, 0); 
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];  
[cell addSubview:button]; 
button.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 

Он имеет нормальное изображение, и если пользователь нажимает на кнопку, изображение меняется. Также я получаю содержимое кнопки button.title из XML. Поэтому я говорю, чтобы получить правильное название из Интернета. Это работает отлично, но иногда (не все время), а также случайным образом он меняет кнопку из следующей ячейки или ячейку на три строки вниз. Я не знаю, почему и ничего не мог найти во время работы с breakpoints/debugger.

-(void)customActionPressed :(id)sender 
{ 
    UITableViewCell *owningCell = (UITableViewCell*)[sender superview]; 

    NSIndexPath *pathToCell = [self.tableView indexPathForCell:owningCell]; 

    UIImage *buttonImage = [UIImage imageNamed:@"image2.png"]; 

    [self doXMLParsing]; 
    [sender setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
    NSString *TableText = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:pathToCell.row] pressed1]]; 
    [sender setTitle:TableText forState:UIControlStateNormal]; 
    ((UIButton *)sender).enabled = NO; 
} 

Так что, возможно, кто-то может увидеть, где я ошибся. Если вам нужно больше кода, просто скажите это.

ответ

1
[button addTarget:self action:@selector(customActionPressed:) 
    forControlEvents:UIControlEventTouchDown]; 

Попробуйте использовать UIControlEventTouchUpInside вместо UIControlEventTouchDown.

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

Также не меняйте изображение с помощью кнопки. Вы можете получить доступ к кнопке через cell.yourbuttonName в делегате didSelectRowAtIndexPath из таблицы, а затем изменить изображение.

+0

Не могли бы вы объяснить вторую часть дальше? Я думаю, что я действительно не понимаю. – Blade

+0

, когда вы создаете пользовательский элемент, вы можете получить к нему доступ [cell.nameofyourbutton setImage: [UIIMAGE imageNamed: @ ""]]; если у вас есть несколько элементов в вашей ячейке, лучше иметь его обычай, так как легче вносить изменения и обращаться к нему таким образом. –

+0

О, ладно, да, чем я понял. Но даже если это appdelegate, он не знает, что делать с «cell.mybutton». – Blade

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