How to add a clickable button on table cell?

43,790

Solution 1

I suggest you delete your Button outlet in your TableViewCell. and just create your button dynamically in cellForRowAtIndexPath: I created a SampleCell Class, subclass of UITableViewCell, it has a UILabel outlet i called "lbl." This should work on your code, assuming that your selector is on the same class where you put your 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;
}

Solution 2

Be sure to Set UserInteraction to YES in cell view and your button

self.userInteractionEnabled = YES;

Solution 3

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;
Share:
43,790
Saurabh
Author by

Saurabh

Updated on September 24, 2020

Comments

  • Saurabh
    Saurabh over 3 years

    I am adding a button in table view cell dynamically. Button shown on table but I am not able to click on them. Here is my Code,

    This my tableviewcell class code:

    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;
    }
    

    Please help me out. Thanks.