UITableView在返回时不保留行

我在我的应用程序中有几个表格视图。 我熟悉表格的常见行为,当您选择一行并进入推送的视图时,它会变成蓝色,然后当您返回时,它会一秒钟保持蓝色,然后变为白色,以便通知用户刚刚选择了哪一行。

直到最近,当我注意到它已经不再是我描述的最后一点时,它一直工作得很好:它在那一瞬间并没有保持蓝色......

我不知道为什么,但是在阅读本网站上的一些相关帖子后,我意识到那个被调用的代码片段在“viewDidAppear”方法中。 令我困惑的是,我没有重写这个方法,但是我用NSLog测试了它,向我显示了它应该取消选择的行的索引路径,它返回(null)。

所以这让我相信,不知何故,tableView过早地取消了这一行。

以下是我的didSelectRowForIndexPath方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Selected row at index path: %@", indexPath);

    //setting our view controller as what we want
    TripDetails *detailViewController = [[TripDetails alloc] initWithNibName:@"TripDetails" bundle:nil];
    self.tripsDetailViewController = detailViewController;
    [detailViewController release];


 // Pass the selected object to the new view controller.
    NSLog(@"Passing trip...");
    self.tripsDetailViewController.selectedTrip =  [fetchedResultsController objectAtIndexPath:indexPath];

    //Hide the bottom bar on pushed view
    tripsDetailViewController.hidesBottomBarWhenPushed = YES;

   [self.navigationController pushViewController:tripsDetailViewController animated:YES];

}

任何帮助非常感谢,谢谢:)


编辑:修正

我得到它的工作....似乎我在我的viewWillAppear方法中调用[self.tableView reloadData]方法,然后导致表取消选择所有单元格。 以下是我修改后的viewDidLoad方法。 感谢您的建议!

- (void)viewWillAppear:(BOOL)animated 
{
NSLog(@"running viewWIllAppear for TripsTable");

//Getting indexpath for highlighened cell, to rehighlight
NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow];

//Refreshing Table - Implement an if statement on the condition that the data has     changed
[self viewDidLoad];
[self.tableView reloadData];

//Re select cell
[self.tableView selectRowAtIndexPath:selectedIndex animated:NO scrollPosition:UITableViewScrollPositionNone];


[super viewWillAppear:animated];
 }

它可以关闭的功能。

在UITableViewController中你可以调用

[ self setClearsSelectionOnViewWillAppear:NO ];

这直接来自文件“UITableViewController.h”。 那里记录了这个功能。

   @property(nonatomic) BOOL clearsSelectionOnViewWillAppear __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_3_2); 
// defaults to YES. If YES, any selection is cleared in viewWillAppear:

尝试

[tableView deselectRowAtIndexPath:indexPath animated:NO];

取消选择一行和

[tableView selectRowAtIndexPath:indexPath animated:NO];

突出显示选定的行。


显然viewWillAppear:类UITableView会取消选择所有单元格,即使不重新加载单元格。 所描述的技巧对我有效:

来自我的UITablViewController的代码:

- (void)viewWillAppear:(BOOL)animated
{
    NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow];

    [super viewWillAppear:animated];

    //Re select cell
    [self.tableView selectRowAtIndexPath:selectedIndex animated:NO scrollPosition:UITableViewScrollPositionNone];
};
链接地址: http://www.djcxy.com/p/60005.html

上一篇: UITableView doesn't keep row selected upon return

下一篇: iPhone UITableView cells stay selected