UITableView 的 IndexPath 不起作用

Posted

技术标签:

【中文标题】UITableView 的 IndexPath 不起作用【英文标题】:IndexPath for UITableView Not Working 【发布时间】:2011-11-16 06:09:48 【问题描述】:

我正在尝试确定我的UITableView 的选择行的indexPath,以便我可以相应地传递相关数据。现在,无论我选择什么单元格,它都会继续记录0。任何想法为什么? (是的,表的IBOutlet 已正确连接)。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"patientChart"])
    
        UITabBarController *tabBar = (UITabBarController *)segue.destinationViewController;
        PatientChartViewController *vc = [tabBar.childViewControllers objectAtIndex:0];
        NSIndexPath *path = [self.appointmentTableView indexPathForSelectedRow];
        vc.appointmentDictionary = [self.appointmentArray objectAtIndex:path.row];
    

【问题讨论】:

选中单元格后是否取消选中? 你是对的。我将取消选择行移到 performSegue 行之前,现在可以正常工作。谢谢。 如果对您没有问题,我会将其作为答案发布,如果您能接受,我将不胜感激 =) 在我的情况下它不起作用,因为我在单元格中有一个触发 segue 的按钮。通过按下一个按钮,就没有调用委托... 【参考方案1】:

方法indexPathForSelectedRow如果选择了行,则返回所选行的索引,否则返回0。

因此,例如,如果 cell 已被选中,后来又被取消选中,那么您将无法通过调用 [tableView indexPathForSelectedRow]; 获得其 index path,因为当时没有选择任何单元格。

【讨论】:

@LukeMcneice 那么您的tableView 始终为nil 或未选择任何内容。【参考方案2】:

如果使用 ios5,解决方案是在 .h 中声明一个实例并将属性设置为复制,如下所示。

NSIndexPath *path;
@property (nonatomic, copy) NSIndexPath *path;

将 indexpath 值分配给实例,即cellForRowAtIndexPath 方法中的路径。

我在尝试在 iOS5 上执行此操作时遇到了这个问题,并按照上述方法解决了这个问题。希望对你有所帮助。

【讨论】:

以上是关于UITableView 的 IndexPath 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableView indexPath 的子类 nil

UITableView,cellForRowAt indexPath 没有被调用

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 没有被调用

获取 UITableView 中最近添加的行的 indexPath

如何在 UITableView 中获取选定的 indexPath.section 和 indexPath.row 值?

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) 几乎符合可选要求