2010-08-09 33 views
1

J'ai UIButton dans chaque cellule de UITableView. Quand je le touche, son état est réglé sur sélectionné. Mais lorsque je fais défiler la vue de la table pour que le bouton ne soit pas visible, l'état est normal. Comment puis-je faire pour que UIButton reste sélectionné?État sélectionné de UIButton dans UITableView

Merci.

Edit: Voici le code cellForRowAtIndexPath:

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

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

if (indexPath.row < [messagesArray count]) { 

    Zprava *msgObj = [messagesArray objectAtIndex:indexPath.row]; 

    int width = 0; 

    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) { 
     width = 320; 
    } else { 
     width = 480; 
    } 

    CGSize boundingSize = CGSizeMake(width, CGFLOAT_MAX); 
    CGSize requiredSize = [msgObj.mmessage sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:boundingSize lineBreakMode:UILineBreakModeWordWrap]; 

    UIButton *background = [[UIButton alloc] initWithFrame:CGRectMake(10, 25, 300, requiredSize.height + 20)]; 
    [background setBackgroundImage:[[UIImage imageNamed:@"balloon.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:15] forState:UIControlStateNormal]; 
    [background setBackgroundImage:[[UIImage imageNamed:@"selected-balloon.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:15] forState:UIControlStateSelected]; 
    [background addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
    background.tag = msgObj.msgID; 
    [[cell contentView] addSubview:background]; 
    [background release]; 

    UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 285, 15)]; 
    [dateLabel setFont:[UIFont systemFontOfSize:12]]; 
    [dateLabel setLineBreakMode:UILineBreakModeWordWrap]; 
    [dateLabel setTextColor:[UIColor lightGrayColor]]; 
    [dateLabel setNumberOfLines:0]; 
    [dateLabel setTextAlignment:UITextAlignmentRight]; 
    [dateLabel setText:msgObj.mdate]; 
    [dateLabel setBackgroundColor:[UIColor clearColor]];  
    [dateLabel setOpaque:NO]; 
    [[cell contentView] addSubview:dateLabel]; 
    [dateLabel release]; 

    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 275, requiredSize.height + 5)]; 
    [messageLabel setFont:[UIFont systemFontOfSize:17]]; 
    [messageLabel setLineBreakMode:UILineBreakModeWordWrap]; 
    [messageLabel setTextColor:[UIColor blackColor]]; 
    [messageLabel setNumberOfLines:0]; 
    [messageLabel setText:msgObj.mmessage]; 
    [messageLabel setBackgroundColor:[UIColor clearColor]]; 
    [messageLabel setOpaque:NO]; 
    [[cell contentView] addSubview:messageLabel]; 
    [messageLabel release]; 

} 

return cell; 

} 

Répondre

2

Etats bouton Enregistrer quelque part dans votre modèle séparément de la vue de la table et définir l'état des boutons dans cellForRowAtIndexpath: méthode nouveau.

+0

Merci pour votre réponse. Mais pouvez-vous s'il vous plaît dites-moi, comment détecter cet état d'UIButton a été changé? –

+0

état du bouton change lorsque l'utilisateur tape dessus, n'est-ce pas? Donc, vous devriez le faire dans le gestionnaire de prise – Vladimir

+0

Non, je pense que lorsque l'état lui-même changé de sélectionné à la normale. –