繁体   English   中英

如何知道我的UITableView中没有选择任何行?

[英]How to know that no row is selected in my UITableView?

我使用UITableView显示项目列表,当选择了一行时,我在该项目旁边的详细视图中显示该项目(使用拆分视图控制器)。

当表格视图中的选择更改时,我希望我的详细信息视图也随之更改,这当然是标准行为,并且可以正常工作...除非表格视图中不再选择任何行。

例如,用户可以从表视图中删除行,并且在删除过程中以及删除之后,表视图中都不会有选定的行。 当然,删除一行后,我会让我的详细信息视图控制器知道,但是在表视图的编辑过程中,当没有选择任何行时,我的详细信息视图控制器将不知道这一点。

我尝试使用UITableViewSelectionDidChangeNotification但是仅当用户选择其他行时才发送,而不是在取消选择时发送。

我如何得知表格视图从选择行切换为完全不选择的事实?

编辑:

作为一个临时解决方案,我尝试将“编辑”按钮重命名为“重新排序”,并且只允许将行从A移到B,但不允许删除控件,但这是无法做到的,没有移动控件就不能对行进行编辑。 关键是,我确实有一个指向要移动的行的指针,因此我可以保持选中状态。 我没有连续删除该指针,所以不适合我。 我一直想知道用户正在处理哪一行,并始终保持选中该行。

我可能不得不放弃标准的编辑行为,并为其添加自己的按钮和方法。 或者看看手势对我有什么作用,以捕获任何行上的触摸...

有一个属性indexPathForSelectedRow 我不确定当没有选定的行时它将返回什么,但是它可能返回nil或类似的东西,您可以将其用作触发器来了解是否有选定的行。 就像是

if (myTable.indexPathForSelectedRow == nil)
{
  //do something here to account for no rows being selected
}
else
{
  //do stuff here to set up your detail view
}

让我知道这是否适合您。

您如何实现行删除? 您是否正在实现以下数据源方法?

tableView:commitEditingStyle:forRowAtIndexPath:

你可以有一个像

NSIndexPath * selectedIndexPath

并在删除行时将其设置为nil。

例:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
   //select another row in your table
   [tableView selectRowAtIndexPath:*indexPathOfTheRowToBeSelected* animated:YES scrollPosition:UITableViewScrollPositionNone];
   //then delete row from data source
}

当用户触摸已选择要删除的表上的删除按钮时,将调用上述方法。

好的,我一开始误读了您的要求,我很确定您想要的是– tableView:willDeselectRowAtIndexPath:– tableView:didDeselectRowAtIndexPath: 当用户取消选择一行时(分别在取消选择该行之前或之后),这些方法将自动触发。 在表视图委托代码中实现其中之一,您将知道每当取消选择一行时,就可以使用其中一种方法将代码放入选择下一行或所需的任何内容。

我也为此感到挣扎。 事实证明,当单击“编辑”按钮时,所有行均在该点被取消选择。 您可以覆盖setEditing:animated:来检测它何时被击中,但是在返回之前必须调用[super setEditing:editing animation:animated]。

请参阅以下链接,了解我在哪里找到的内容:

如何识别self.editButtonItem按钮的单击事件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM