2012-09-24 3 views
5

J'ajoute dynamiquement un bouton dans la cellule de vue de table. Bouton affiché sur la table mais je ne suis pas en mesure de cliquer dessus. Voici mon code,Comment ajouter un bouton cliquable sur une cellule de table?

Ce tableviewcell mon code de classe:

MessageTableViewCell.h

#import <UIKit/UIKit.h> 
@interface MessageTableViewCell : UITableViewCell { 
{IBOutlet UIButton *chat_pic_btn;}} 
@property (nonatomic, retain) UIButton *chat_pic_btn; 
@end; 

MessageTableViewCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {chat_pic_btn=[[UIButton alloc]init]; 
[self.contentView addSubview:chat_pic_btn];}} 

MessageTable.m

-(void)customActionPressed :(id)sender 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Custom Button Pressed" 
                 message:[NSString stringWithFormat: @"You pressed the custom button on cell"] 
                 delegate:self cancelButtonTitle:@"Great" 
               otherButtonTitles:nil]; 
    [alertView show]; 
} 

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

    static NSString *CellIdentifier = @"CellIdentifier"; 
    MessageTableViewCell *cell = (MessageTableViewCell *)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     // cell = [[MessageTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]; 
     cell = [[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
cell.chat_pic_btn.frame = CGRectMake(180, 24, 70,35); 
      [cell.chat_pic_btn setImage:[UIImage imageNamed:@"done.png"]forState:UIControlStateNormal]; 
      [cell.chat_pic_btn addTarget:self action:@selector(customActionPressed:) forControlEvents:UIControlEventTouchDown]; 
return cell; 
} 

Plea Aidez-moi. Merci.

+0

Est-ce bouton sur tous les plans? Est-il rendu correctement? – ThomasW

+0

Ya il y a une condition si la condition est vraie alors le bouton apparaîtra sur la vue. Le bouton est affiché correctement mais je ne suis pas en mesure d'appeler une méthode au clic. – Saurabh

+0

Vous devez probablement également afficher le code que vous utilisez pour créer les cellules du tableau. Aussi, que se passe-t-il lorsque vous cliquez sur la cellule bouton? Y a-t-il un accident? Ou pas d'effet du tout? – ThomasW

Répondre

10

Je suggère vous supprimez votre sortie Button dans votre TableViewCell. et il suffit de créer dynamiquement votre bouton dans cellForRowAtIndexPath: J'ai créé une classe SampleCell, sous-classe de UITableViewCell, elle a une sortie UILabel appelée "lbl". Cela devrait fonctionner sur votre code, en supposant que votre sélecteur est sur la même classe où vous mettez votre tablview;

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

    if (cell == nil) { 
     NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SampleCell" owner:self options:nil]; 
     for (id currentObject in topLevelObjects) { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) { 
       cell = (SampleCell *)currentObject; 
       break; 
      } 
     } 
    } 
    // Configure the cell. 
    cell.lbl.text = @"Hello"; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    //set the position of the button 
    button.frame = CGRectMake(cell.frame.origin.x + 100, cell.frame.origin.y + 20, 100, 30); 
    [button setTitle:@"World" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(customActionPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    button.backgroundColor= [UIColor clearColor]; 
    [cell.contentView addSubview:button]; 

    return cell; 
} 
+2

Merci pour votre réponse. Mais ça ne marche toujours pas. :( – Saurabh

+0

hmm étrange .. Je l'ai codé il y a un instant .. avez-vous supprimé votre IBOutlet UIButton * btn dans votre classe TableViewCell? –

+0

Utilisez cell.bounds.origin, pas cell.frame.origin pour l'image du bouton. –

1
UIButton *yourBtn = [[UIButton alloc] initWithFrame:CGRectMake(0,0, 50, 50)]; 
[yourBtn setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal]; 
[yourBtn addTarget:self action:@selector(submitBtnPress:) forControlEvents:UIControlEventTouchUpInside]; 

cell.accessoryView = yourBtn; 
+0

désolé, c'est mon erreur quand je pose une question. Mais cela ne fonctionne pas ... et la ligne de code que vous avez fourni son ne fonctionne pas. C'est ma méthode que j'ai appelée - (IBAction) show_chat_pic: (id) expéditeur { NSLog (@ "in show"); UIImageView * imageview = [[UIImageView alloc] initWithFrame: CGRectMake (5, 50, 310, 320)]; imageview.image = sender_profile2; [self.view addSubview: imageview]; } – Saurabh

+2

Pas une réponse .... Il devrait être un commentaire ... – Maulik

+0

chk mis à jour la réponse @ user1652551 – Rajneesh071

0

Vous avez pas donné un événement de contrôle du bouton ou modifier à UIControlEventTouchUpInside de UIControlStateNormal et de le faire qu'une seule fois :)

+0

je pense que j'ai donné l'événement [cell.chat_pic_btn addTarget: action de soi: @selector (show_chat_pic :) forControlEvents: UIControlEventTouchUpInside]; – Saurabh

+0

Cochez ce lien et essayez de modifier votre code http: // stackoverflow.com/questions/10732229/uibutton-ne-répondant-à-click-événement-in-uitableviewcell – IronManGill

5

Veillez à régler UserInteraction YES en mode cellulaire et votre bouton

self.userInteractionEnabled = YES; 
Questions connexes