来自另一个 UIVIewController 的 selectRowAtIndexPath 不起作用 [英] selectRowAtIndexPath from another UIVIewController not working

查看:23
本文介绍了来自另一个 UIVIewController 的 selectRowAtIndexPath 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 UITableView 上调用 selectRowAtIndexPath,该 UITableView 是我从中调用它的 UIViewController 的子视图.

I am trying to call selectRowAtIndexPath on a UITableView that is a subview to the UIViewController I am calling it from.

我已经设置好了,当你选择一个单元格时它会变灰,这很好,但是我正在加载不同的数据集进出 UITableView,每当做出选择时,我都会将所选的 NSIndexPath 发送回UIViewController.然后,当接下来为 NSIndexPath 加载正确的数据集时,我会从 UIViewController 调用此方法.

I have set it up so that when you select a cell it goes grey and thats fine, however I am loading different data sets in and out of the UITableView and when ever a selection is made I am sending that selected NSIndexPath back to the UIViewController. Then when the view is next loaded with the correct data set for the NSIndexPath I call this method from my UIViewController.

if (codeIndexPath != nil) {
            [filterViewController.tableView selectRowAtIndexPath:codeIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}

然后在 UITableView 类中,我的 cellForRowAtIndexPathdidSelectRowAtIndexPath 看起来像这样.

Then in the UITableView class my cellForRowAtIndexPath and didSelectRowAtIndexPath look like this.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // Configure the cell...
    NSString *projectDescriptionString = [currentFilterMutableArray objectAtIndex:indexPath.row];
    cell.textLabel.text = projectDescriptionString;
    if (indexPath == currentlySelectedIndex) {
        cell.highlighted = YES;
    } else if (indexPath == currentlySelectedIndex) {
        cell.highlighted = NO;
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    cell.selectionStyle = UITableViewCellSelectionStyleGray;

    // send this data back in the delegate so you can use it to show where the tick is again if you need too.
    currentlySelectedIndex = indexPath;

    [[self delegate] updateInstallTableWithFilter:[currentFilterMutableArray objectAtIndex:indexPath.row] FilterType:filterType InstallIndex:indexPath];

}

当它加载到屏幕上时,正确的单元格会高亮显示一秒钟,然后变回白色.

When It loads on the screen the correct cell will highlight for a second then go back to white.

cellForRowAtIndexPath 中的新 if 语句

New if statment inside cellForRowAtIndexPath

if ([indexPath isEqual:currentlySelectedIndex]) {
        cell.highlighted = YES;
    } else if (![indexPath isEqual:currentlySelectedIndex]) {
        cell.highlighted = NO;
    }

我仍然收到同样的错误.

I am still receiving the same error.

推荐答案

UITableViewController 有一个名为 clearsSelectionOnViewWillAppear 的属性.来自文档:

UITableViewController has a property called clearsSelectionOnViewWillAppear. From the doc:

当table view第一次被加载时,表视图控制器重新加载表视图的数据.它也清除它的选择(有或没有动画,取决于请求)每次显示表格视图时.UITableViewController类在超类方法 viewWillAppear: 中实现了这一点.你可以通过更改中的值来禁用此行为clearsSelectionOnViewWillAppear 属性.

When the table view is about to appear the first time it’s loaded, the table-view controller reloads the table view’s data. It also clears its selection (with or without animation, depending on the request) every time the table view is displayed. The UITableViewController class implements this in the superclass method viewWillAppear:. You can disable this behavior by changing the value in the clearsSelectionOnViewWillAppear property.

所以在那个表视图控制器子类中,在 viewDidLoad...

So in that table view controller subclass, in viewDidLoad...

- (void)viewDidLoad {
    [super viewDidLoad];
    self.clearsSelectionOnViewWillAppear = NO;
}

这篇关于来自另一个 UIVIewController 的 selectRowAtIndexPath 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆