我使用UITableView
来显示项目列表,当选择一行时,我会在旁边的详细视图中显示该项目(使用拆分视图控制器)。
随着表格视图中的选择发生变化,我希望我的细节视图也会发生变化,这当然是标准行为,它可以完美地运行......除非在表格视图中不再选择任何行。
用户可以例如从表视图中删除一行,在删除期间和删除之后,表视图中将没有选定的行。当然删除一行后我知道我的详细视图控制器,但在表视图的编辑过程中,当没有选择行时,我的详细视图控制器不知道这一点。
我尝试使用UITableViewSelectionDidChangeNotification
,但仅在用户选择其他行时发送,而不是在取消选择时发送。
如何通知表视图从选择行切换到根本没有选择的事实?
编辑:
作为临时解决方案,我尝试将“编辑”按钮重命名为“重新排序”,并且只允许将行从A移动到B但不允许删除控件,但是这不能完成,没有启用编辑就没有移动控件在一排。问题是,我确实得到了一个指向行的指针,因此我可以保持选择状态。我没有得到这个指针用于删除行,所以不适合我。我总是想知道用户在哪一行上工作,并始终保持该行的选择。
我可能不得不放弃标准编辑行为并为其添加自己的按钮和方法。或者看看手势可以为我捕捉任何行上的触摸......
答案 0 :(得分:3)
有一个属性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
}
请告诉我这是否适合您。
答案 1 :(得分:0)
如何实现删除行?您是否正在实施以下数据源方法?
的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
}
当用户触摸他/她选择删除的表上的删除按钮时,将调用上述方法。
答案 2 :(得分:0)
好吧,我一开始误解了你的问题,我很确定你想要的是– tableView:willDeselectRowAtIndexPath:
还是– tableView:didDeselectRowAtIndexPath:
。当用户取消选择一行时(在取消选择行之前或之后),将自动触发这些方法。在表视图中实现其中一个委托代码,并且您将知道何时取消选择行,并且您可以将代码用于在其中一个方法中选择下一行或任何您想要的行。
答案 3 :(得分:0)
我也在努力解决这个问题。事实证明,当点击“编辑”按钮时,在该点取消选择所有行。你可以覆盖setEditing:animated:来检测它何时被击中,但你必须在返回之前调用[super setEditing:editing animated:animated]。
请参阅此链接以了解我发现的位置:
How can i identify self.editButtonItem button's clicked event?