0

在我的项目中,我有自定义UITableview单元格,其中恰好有一个按钮。当这个按钮被选中时,它会触发一个转场。在这个 segue 中,我将一个对象从 cell 传递到 destination UIViewcontroller。我目前正在使用以下代码

else if ([[segue identifier] isEqualToString:@"Add"])
{
    SearchAddRecordViewController *addRecordViewController = [segue destinationViewController];
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    SearchCell *cell = [self.tableView cellForRowAtIndexPath:path];
    NSLog(@"%@", cell.record);
    addRecordViewController.workingRecord = cell.record;
}

事实证明我传递的是 null,因为按钮没有触发单元格的选择,因此没有 indexPathForSelectedRow。我的问题是,如何获取已按下按钮的单元格的索引路径。

编辑:已回答

4

4 回答 4

0

确定避免子类化 UIButton 的 indexPath 的另一种方法是:

CGPoint point = [button.superview convertPoint:button.center toView:self.tableView];
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point];

编辑:

我已将此因素考虑到一个很好的方法中,您可以将其添加到 UITableView 上的类别中:

-(NSIndexPath*)indexPathOfCellComponent:(UIView*)component {
    if([component isDescendantOfView:self] && component != self) {
        CGPoint point = [component.superview convertPoint:component.center toView:self];
        return [self indexPathForRowAtPoint:point];
    }
    else {
        return nil;
    }
}
于 2013-05-08T08:45:36.390 回答
0

您在自定义单元格的 .h 文件中声明一个 NSIndexpath 变量,并将 indexPath 分配给 cellForRowAtindexPath 中的该变量。并检索它并使用它....希望它会工作

于 2013-05-08T07:27:32.433 回答
0

对于遇到类似问题的任何人,这就是我能够解决的方法。

我首先使用 NSIndexPath 属性为 UIButton 子类创建了实现和头文件。我为 Storyboard 中的 uibutton 分配了这个具有 NSIndexPath 属性的新自定义取消按钮的超类。我在 segue 识别步骤中添加了以下代码(关键是意识到我可以使用 sender 对象作为触发 segue 的源):

else if ([[segue identifier] isEqualToString:@"Add"])
{
    SearchAddRecordViewController *addRecordViewController = [segue destinationViewController];
    addRecordButton *button = (addRecordButton*) sender;
    NSIndexPath *path = button.indexPath;
    SearchCell *cell = [self.tableView cellForRowAtIndexPath:path];
    addRecordViewController.workingRecord = cell.record;
}
于 2013-05-08T08:20:50.770 回答
0

您可以通过以下方式执行此操作,这可以帮助您唯一地识别哪个按钮被点击,并且您可以传递适当的值,例如,我只是传递一个字符串值

假设OutputString是目标视图控制器中的字符串属性

if ([[segue identifier] isEqualToString:@"yourSegueIdentifier"]) {

    UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *clickedButtonPath = [self.myTableView indexPathForCell:clickedCell];
    [segue.destinationViewController setOutputString:@"XYZ"];        
}
于 2013-05-08T09:51:11.753 回答