SplitViewController中的UITable单元格选择

时间:2010-10-29 20:05:41

标签: iphone ipad uitableview

我有一个带有Table View的UISplitViewController用于导航。它类似于Mail应用程序。在纵向模式下单击表视图时,弹出窗口会隐藏自身。单击导航栏以返回弹出窗口时,所选项目不再显示为已选中。如何在不重新选择项目的情况下选中此项目? (就像在邮件应用程序中一样)

4 个答案:

答案 0 :(得分:2)

在viewDidLoad方法中,您是否致电

self.clearsSelectionOnViewWillAppear = NO;

这就是Xcode的SplitView模板的功能。

答案 1 :(得分:0)

你有任何改变吗

[tableView deselectRowAtIndexPath:indexPath animated:YES];

在RootViewController的didSelectRowAtIndexPath中?

答案 2 :(得分:0)

我有一个有效的解决方案,但令人沮丧的是hacky。我必须两次调用selectRowAtIndexPath。似乎cellForRowAtIndexPath使viewWillAppear中的选择无效。但仍然需要在viewDidAppear中调用它,因此视图在调用cellForRowAtIndexPath之前滚动到正确的位置。

- (void)viewWillDisappear:(BOOL)animated
{
    NSIndexPath *selected = [self.tableView indexPathForSelectedRow];
    _selectedRow = selected.row;
}

- (void)viewDidAppear:(BOOL)animated
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_selectedRow inSection:0];
    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //initialize cell code here...

    if (indexPath.row == _selectedRow) {
        [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
    }   
}

答案 3 :(得分:0)

对于您的表格视图控制器,在显示弹出窗口之前调用-viewWillAppear:?如果是这样,你可以这样写:

- (void)viewWillAppear:(BOOL)animated
{
    [self.tableView selectRowAtIndexPath:<indexPath>
                                animated:animated
                          scrollPosition:UITableViewScrollPositionMiddle];

    [super viewWillAppear:animated];
}

显然,用适当的索引路径替换<indexPath>并按照您想要的方式设置滚动位置。您可能还希望传递NO而不是animated,以使其看起来像是在视图出现之前被选中。