selectRowAtIndexPath 在 vi​​ewWillAppear 中失败

Posted

技术标签:

【中文标题】selectRowAtIndexPath 在 vi​​ewWillAppear 中失败【英文标题】:selectRowAtIndexPath failing in viewWillAppear 【发布时间】:2011-09-28 22:06:41 【问题描述】:

I've got a menu that's a UITableview in a UIPopovercontroller that when selected scrolls the parent view's UIScollView to a specific frame.

效果很好。

问题是如果你使用pageControl滚动框架我需要更新表格中选中的行[_delegate returnPageNumber]返回当前pageControl.currentPage

没有错误,NSLog 正在报告正确的页码:

scrollIndexPath is <NSIndexPath 0x1a3380> 2 indexes [0, 3]

但是正确的单元格没有突出显示...为什么????

- (void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    //[tableView reloadData];
    int isPage = [_delegate returnPageNumber];
    NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:(isPage) inSection:0];
    NSLog(@"scrollIndexPath is %@",scrollIndexPath);
    [tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];      

我尝试在之前和之后放置 [tableView reloadData] 并将代码放在 viewDidAppear 中......没有任何效果

【问题讨论】:

你为什么不使用 -didSelectRowAtIndexPath? 【参考方案1】:

尝试在其他所有内容之后调用[super viewWillAppear],在viewWillAppear

- (void)viewWillAppear:(BOOL)animated 


    NSIndexPath *selection = [self.tableView indexPathForSelectedRow];

    [[self tableView] reloadData];    


    if (selection)
    
        [[self tableView] selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];        
    

    [super viewWillAppear:animated]; //Trick is calling super last in this case. Then you can  retrieve previously selected row to --> NSIndexPath *selection


【讨论】:

【参考方案2】:

现在开始工作了!

- (void)viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];

    [[self tableView] reloadData];

    int isPage = [_delegate returnPageNumber];

    NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:(isPage) inSection:0];
    NSLog(@"viewDidAppear scrollIndexPath is %@",scrollIndexPath);

    [[self tableView] selectRowAtIndexPath:scrollIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone];

造成差异的事情是断开视图出口,然后将其重新连接到 tableview。不知道为什么这会有所作为?我尝试将视图控制器添加到笔尖,但没有任何区别,因此删除它并将视图重新连接到 tableview 突然产生了结果。巫毒教。

【讨论】:

以上是关于selectRowAtIndexPath 在 vi​​ewWillAppear 中失败的主要内容,如果未能解决你的问题,请参考以下文章

在 tableview 上调用 selectRowAtIndexPath 时出现 Swift 错误

来自另一个 UIVIewController 的 selectRowAtIndexPath 不起作用

selectRowAtIndexPath 仅在 allowedMultipleSelection 为 YES 时有效

我可以在 UITableView 上使用 -selectRowAtIndexPath: (或其他任何东西)来触发委托的 -didSelectRowAtIndexPath: 方法吗?

子视图可见时如何禁用 selectRowAtIndexPath

UITapGestureRecognizer 打破 UITableView SelectRowAtIndexPath?