[英]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]。
请参阅以下链接,了解我在哪里找到的内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.