我有UITableView.In我已经创建了带附件按钮的自定义单元格。现在点击附件按钮我想创建另一个带有编辑单元功能的视图。为此我如何找到该单元格的索引路径?以及如何我是否通过该单元格的价值?
如何调用以下方法:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
答案 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”包含基于搜索/过滤条件的所有数据的子集或搜索/过滤结果。