从UITableView的detailView返回时确定最后选择的行

时间:2011-06-09 17:05:06

标签: objective-c cocoa-touch uitableview

好的,我在UITableView中选择了行时推送了一个detailView。在detailView中,我设置了som数据并将其传递给webservice。我想在推送detailView之前或者它将消失时检索一些数据。根据检索到的数据,我将UIImage设置为指标。

我想知道如何确定indexpath.row推送了detailView并将其用于设置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。 我有什么建议可以解决这个问题。在详细视图中设置一些值并在UITableView中显示特定行的一些数据一定很常见,但是很难找到任何好的教程。 我只找到如何将数据传递到detailView,我没有任何问题。

先谢谢大家。

2 个答案:

答案 0 :(得分:1)

请勿取消选择tableView:didSelectRowAtIndexPath:中的行。当您返回此视图控制器时,只需使用indexPathForSelectedRow对象的UITableView方法。

但从长远来看,这没什么意义。由于表视图重用这些单元格,因此您还需要记住具有该图像的行。您可能必须为此维护一个数组。在这种情况下,您可以将数组和索引路径传递给详细视图控制器并在那里更新它们,或者使用委托或通知机制从表视图控制器中更新数组。

答案 1 :(得分:0)

我会使用int的ivar,使用负值来表示空值选择:

@interface MyController : UIViewController {

int lastSelection;

}
...
@end

@implementation MyController
...
- (void)initWithBlablabla{
    ...
    lastSelection = -1;
}

...

@end

但是,我认为你应该更好地重新考虑你的设计,参考KVO编程指南。在一般的MVC模式中,控制器不是存储模型状态的正确位置。