故事板自定义UITableviewcell选择

时间:2013-05-08 07:15:47

标签: ios uitableview segue

在我的项目中,我有自定义UITableview单元格,其中恰好有一个按钮。选择此按钮时,会触发segue。在这个segue中,我将一个对象从单元格传递到目标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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我首先使用NSIndexPath属性为UIButton子类创建了实现和头文件。我在故事板中为uibutton分配了这个新自定义unbutton的超类和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;
}

答案 2 :(得分: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;
    }
}

答案 3 :(得分:0)

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

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

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

    UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *clickedButtonPath = [self.myTableView indexPathForCell:clickedCell];
    [segue.destinationViewController setOutputString:@"XYZ"];        
}