从UITableView的detailView返回时判断最后选中的行
Posted
技术标签:
【中文标题】从UITableView的detailView返回时判断最后选中的行【英文标题】:Determine the last selected row when returning from detailView of UITableView 【发布时间】:2011-06-09 17:05:06 【问题描述】:好的,当在 UITableView 中选择行时,我会推送一个 detailView。在 detailView 中,我设置了 som 数据并将其传递给 web 服务。我想在 detailView 被推送之前或它消失时检索一些数据。根据检索到的数据,我将 UIImage 设置为指标。
我想知道如何确定 detailView 被推送到的 indexpath.row 并将其用于设置 UIImage。这可能吗?
我有一个 UISegmentedControl,它为 UITableView 加载两个不同的数据源。
为了进行测试,我在推送 detailView 时传递 indexpath.row,并在 UIImage 应该显示时回调到 UITableView 类以及布尔值。
但我的问题是加载 UITableView 时 indexpath.row 为 0。 当来回更改数据源并传递 indexpath.row 时,指示器将显示在错误的行上。
表的两个数据源是:
if (index == 0)
dictionary = [firstArray objectAtIndex:indexPath.row];
else
dictionary = [secondArray objectAtIndex:indexPath.row];
然后我为该行设置指示器(稍后将是 UIImage):
if (indexPath.row == selectedIndex)
cell.indicator.text = @"Begin";
当在 didSelectRowAtIndexPath 中推送 detailView 时,我传入 indexPath.row:
NSInteger rowIndex = indexPath.row;
[self.detailViewController initWithDetailsSelected:rowIndex:dictionary];
当 detailView 完成后,UITableView 类会收到回调:
- (void)processAttendanceSuccessful:(BOOL)successful:(NSInteger)_selectedIndex
self.selectedIndex = _selectedIndex;
因此,基于布尔值,应为 UITableView 中的正确行显示 UIImage。 任何建议我可以如何去做。在 detailView 中设置一些值并在 UITableView 中为特定行显示一些数据一定很常见,但是很难找到任何好的教程。 我只发现如何将数据传递到detailView,我对此没有任何问题。
在此先感谢大家。
【问题讨论】:
【参考方案1】:不要取消选择tableView:didSelectRowAtIndexPath:
中的行。当你返回到这个视图控制器时,只需使用UITableView
对象的indexPathForSelectedRow
方法即可。
但从长远来看,这没有什么意义。由于表格视图重用了这些单元格,因此您还需要记住具有图像的行。您可能必须为此维护一个数组。在这种情况下,您可以将数组和索引路径传递给详细视图控制器并在那里更新它们,或者使用委托或通知机制从表视图控制器中更新数组。
【讨论】:
【参考方案2】:我会使用 int 的 ivar,使用负值表示空选择:
@interface MyController : UIViewController
int lastSelection;
...
@end
@implementation MyController
...
- (void)initWithBlablabla
...
lastSelection = -1;
...
@end
但是,我认为您最好参考 KVO 编程指南重新考虑您的设计。在一般的 MVC 模式中,控制器不是存储模型状态的正确位置。
【讨论】:
以上是关于从UITableView的detailView返回时判断最后选中的行的主要内容,如果未能解决你的问题,请参考以下文章
基于对象状态的从 UITableView 到 DetailView 的条件 Segue
从 DetailView 将单元格添加到“收藏夹”TableView
在ios中为uitableview的所有单元格下添加不可见的detailview,并在用户点击单元格时使其可见/不可见
带有 .PLIST 的 Detailview 中的 UIPickerView