自定义的uitableviewcell里面的button不起作用
我有一个自定义TableCell和一个UiButton通过IB关联。 但button操作方法总是返回button索引为零
以下是我的代码
//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); }
这里索引path总是返回零。 任何想法 。 请帮帮我
[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); }
试试这可能会帮助你。
- (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); }
代码button编程
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];
我有同样的问题,并尝试了一切。 终于做到这一点的东西正在实施的方法
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
只要返回你的自定义单元格的高度(查看NIB文件)
试用这个波纹pipe代码
- (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); }
要么
UIButton *button = (UIButton *)sender; CGRect buttonFrame = [button convertRect:button.bounds toView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonFrame.origin];
或以编程方式在单元格中添加自定义button的整个示例
- (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; }
并获得索引path与波纹pipe代码…
//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);