我创建了一个自定义表格单元应用程序。每个单元格包含按钮。我在stackoverflow上发现,找出第1行中的按钮是单击还是单击第2行的最佳方法是使用此方法
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
然而我无法使用它,因为我没有在self.tableView中收到错误。
这是因为我使用UIViewcontroller并实现tableviewdelegate和tableviewdatasource,而不是使用UItableviewcontroller。并且viewcontroller没有任何属性tableview。
我无法将UIViewcontroller更改为UItableViewcontroller,因为代码中的所有地方我都在使用fileowner推送viewcontrollers
那我怎么能摆脱self.tableview错误
答案 0 :(得分:2)
我的建议是在创建自定义单元格对象时将其保留在自定义单元格对象中。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Your cell creation logic here.
//Set indexpath in the custom cell.
cell.parentIndexPath = indexPath;
return cell;
}
单击该按钮时,您可以在自定义单元格对象中进行检查:
-(IBAction) buttonClicked: (id) sender {
NSLog(@"User clicked on index path %@", self.parentIndexPath);
}
您必须在自定义单元格标题(.h)文件中声明parentIndexPath。
@property (nonatomic, strong) NSIndexPath *parentIndexPath;
答案 1 :(得分:1)
尝试为您的表创建属性
@property (strong, nonatomic) IBOutlet UITableView *myTableView;
然后设置myTableView而不是self.tableview。我试过这个,这个对我很有用
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:myTableView];
NSIndexPath *indexPath = [buddyListTableView indexPathForRowAtPoint:buttonPosition];
NSLog(@"Index Path :%d",indexPath.row);
答案 2 :(得分:0)
这应该有效:
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:(UITableView *)self.view];
但你应该有@property
指向表视图。