I have a custom TableCell and a UiButton is associated with this via IB. But the button action method always return the button index as zero
Below is my code
//Inside CellForRow
[cell.M_CtrlBtnChat addTarget: self
action: @selector(buttonPressed:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
UITouch * touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView: self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location];
NSLog(@"%d", indexPath.row);
}
Here index path always return zero. Any idea . Please help me
[cell.M_CtrlBtnChat addTarget: self
action: @selector(buttonPressed:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
cell.M_CtrlBtnChat.tag = indexPath.row;
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
UIButton *btn = (UIButton *)sender;
NSLog(@"btn.tag %d",btn.tag);
UITouch * touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView: self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location];
NSLog(@"%d", indexPath.row);
}
try this it may help you.
I had the same problem and tried EVERYTHING. The thing that finally did it was implementing the method
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Just return whatever the height is of your custom cell (look in the NIB file)
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.mMessagesTable];
NSIndexPath *indexPath = [self.mMessagesTable indexPathForRowAtPoint:touchPoint];
NSLog(@"%d", indexPath.row);
}
code for button programmatically
UIButton *mNewMsgDwn = [UIButton buttonWithType:UIButtonTypeCustom];
[mNewMsgDwn setImage:[UIImage imageNamed:@"new_message.png"] forState:UIControlStateNormal];
[mNewMsgDwn addTarget:self action:@selector(newMsg) forControlEvents:UIControlEventTouchUpInside];
mNewMsgDwn.frame = CGRectMake(179, 357, 137, 27);
[self.view addSubview:mNewMsgDwn];
try it out using this bellow code..
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview;
UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSLog(@"%d", indexPath.row);
}
OR
UIButton *button = (UIButton *)sender;
CGRect buttonFrame = [button convertRect:button.bounds toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonFrame.origin];
OR Whole Example with add Custom Button in cell programatically
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
.......
cell.textLabel.text = [NSString stringWithFormat:@"Cell #%i", indexPath.row + 1];
//Create the button and add it to the cell
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(customActionPressed:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Custom Action" forState:UIControlStateNormal];
button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f);
[cell addSubview:button];
return cell;
}
and get index path with bellow code...
//Get the superview from this button which will be our cell
UITableViewCell *tblCell = (UITableViewCell*)[sender superview];
//From the cell get its index path.
NSIndexPath *indexPathE = [myTableView indexPathForCell:tblCell];
NSLog(@"%d", indexPathE.row);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.