0

I use a UITableViewto display a list of items, and when a row is selected I show that item in a detail view next to it (using a split view controller).

随着表视图中的选择发生变化,我希望我的详细视图也发生变化,这当然是标准行为,并且它可以完美地工作......除非在表视图中不再选择任何行。

例如,用户可以从表视图中删除一行,并且在删除期间和删除之后,表视图中将没有选定的行。当然删除一行后我让我的细节视图控制器知道,但是在表格视图的编辑过程中,当没有选择行时,我的细节视图控制器不知道这一点。

我尝试使用,UITableViewSelectionDidChangeNotification但只有在用户选择不同的行时才会发送,而不是在取消选择时发送。

如何通知我表格视图从选择行切换到完全没有选择的事实?

编辑:

作为临时解决方案,我尝试将“编辑”按钮重命名为“重新排序”,并且只允许将行从 A 移动到 B,但不允许删除控件,但这无法做到,如果不启用对行的编辑,则没有移动控件. 问题是,我确实得到了一个指向要移动的行的指针,所以我可以保持选中状态。我没有得到这个指针来删除一行,所以不适合我。我总是想知道用户在哪一行工作,并始终选择该行。

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

4

4 回答 4

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
}

让我知道这是否适合您。

于 2012-11-09T13:52:27.413 回答
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
}

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

于 2012-11-09T11:28:26.693 回答
0

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

请参阅此链接了解我在哪里找到的:

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

于 2013-07-24T05:24:05.063 回答
0

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

于 2012-11-09T14:38:14.077 回答