【发布时间】:2014-12-30 21:24:48
【问题描述】:
当在 UITableView 中的单元格上执行长按时,我正在尝试执行 IBAction。该操作涉及单元格的内容,因此我需要获取 indexPath 以便从本地存储中的字典中检索内容。 IBAction 方法在包含 UITableView 方法的 MasterViewController.m 文件中定义,并且是 UITableViewController 的子类。我已经尝试了以下所有方法,它们都返回 null 而不是单元格的 indexPath。
UITableViewCell *cell = (UITableViewCell *)self;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
我还看到了几年前使用视图中单元格位置的类似问题的答案,但我也无法让其中任何一个工作。
更新: IBAction、sendToPB 是在 UITableViewController 的子类中定义的。 Interface Builder 的单元格中添加了一个长按手势识别器,Sent Actions 连接到 sendToPB。当您长按表格视图中的单元格时,该操作应该是将单元格的内容复制到剪贴板。到目前为止,我尝试过的所有方法都为 indexPath 返回 null。
- (IBAction)sendToPB:(id)sender {
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSString *object = self.objects[indexPath.row];
UIPasteboard *pb = [UIPasteboard generalPasteboard];
NSString *pressedCellText = [[Data getAllNotes] objectForKey:object];
[pb setString: pressedCellText];
}
更新:
我发现这种方法有两个问题。首先,长按手势实际上并没有选择行,这就是所有使用indexPathForSelectedRow 的选项都不起作用的原因。其次,sender 是手势识别器,而不是单元格或行,因此使用sender 也会为indexPath 生成一个空值。考虑到这两个因素,您还能如何检测您在哪个单元格上执行了长按?
【问题讨论】:
-
调试的时候,self看起来是什么类型的对象?您将其转换为表格单元格,但随后您也调用 self.tableView ,就像它是视图控制器一样。
-
添加代码 sn-p 用于将长手势添加到单元格
-
您需要显示更多代码。展示如何设置和处理长按。
-
请看下面我的回答,试试 NSIndexPath *indexPath = self.tableview.indexPathForSelectedRow 然后断点,报告indexPath和object的值。
-
@ChiliOcean 不,它可能使手势识别器成为发送者。为什么不使用调试器进行检查。
标签: ios uitableview ibaction nsindexpath