如何在单击自定义附件按钮时获取UITableView中单元格的索引路径?

时间:2011-10-17 05:40:35

标签: iphone objective-c xcode

我有UITableView.In我已经创建了带附件按钮的自定义单元格。现在点击附件按钮我想创建另一个带有编辑单元功能的视图。为此我如何找到该单元格的索引路径?以及如何我是否通过该单元格的价值?

如何调用以下方法:

 - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

3 个答案:

答案 0 :(得分:84)

首先要注意的是,当您在单元格中使用自定义 accessoryView 时,将不会调用 tableView:accessoryButtonTappedForRowWithIndexPath:委托方法。您必须向要添加的按钮添加一些目标/操作作为自定义附件并自行处理点击操作。你应该添加这样的自定义配件,

UIButton *accessory = ...;
[accessory addTarget:self action:@selector(onCustomAccessoryTapped:) forControlEvents:UIControlEventTouchUpInside];
...
cell.accessoryView = accessory;

onCustomAccessoryTapped:方法中,你必须得到像这样的索引路径,

- (void)onCustomAccessoryTapped:(UIButton *)sender {

    UITableViewCell *cell = (UITableViewCell *)sender.superview;
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];

    // Now you can do the following
    [self tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath];

    // Or you can do something else here to handle the action
}

答案 1 :(得分:3)

indexPath作为第二个参数传递给方法。

答案 2 :(得分:3)

使用“indexPathForCell”就像emptystack

所提到的那样

[yourViewController.tableView indexPathForCell:cell];

此外,如果您使用的是tableview和Search View,请在控制器中确保使用searchDisplayController

NSIndexPath *indexPath;
NSDictionary *campaignMember;
if(self.searchDisplayController.isActive) {
        indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForCell: cell];
        campaignMember = [self.filterResults objectAtIndex:indexPath.row];
} else {
    indexPath = [self.tableView indexPathForCell: cell];
    campaignMember = [self.dataRows objectAtIndex:indexPath.row];
}
NSString *id = [campaignMember objectForKey:@"Id"];

在我的情况下,“campaignMember”是一个人物对象,我需要获得它的身份。 “self.dataRows”是一个包含主表数据的数组,其中“self.filterResults”包含基于搜索/过滤条件的所有数据的子集或搜索/过滤结果。