gpt4 book ai didi

iphone - 奇怪的 UIKit 错误, TableView 行保持选中状态

转载 作者:行者123 更新时间:2023-12-03 21:23:34 27 4
gpt4 key购买 nike

我遇到了一个看似 UIKit 的错误,它需要组合两个不太常用的功能才能重现它,所以请耐心等待。

我有相当常见的 View 层次结构:

UITabBarController -> UINavigationController -> UITableViewController

当选择一行时, TableView Controller 将另一个 TableView Controller 推送到导航 Controller 的堆栈上。这里的代码绝对没有什么特别或奇特的地方。

但是,第二个 UITableViewController(如果您愿意的话,“详细 View Controller ”)会执行两件事:

  1. 它在其 init 方法中将 hidesBottomBarWhenPushed 设置为 YES,因此当按下此 Controller 时,选项卡栏会隐藏:

    - (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super initWithStyle:style]) {
    self.hidesBottomBarWhenPushed = YES;
    }
    return self;
    }
  2. 它在中的self.navigationController上调用setToolbarHidden:NOanimated:YESsetToolbarHidden:YESanimated:YES viewWillAppear:viewWillDisappear: 分别导致 UINavigationController 提供的 UIToolbar 通过动画显示和隐藏:

    - (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setToolbarHidden:NO animated:YES];
    }

    - (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setToolbarHidden:YES animated:YES];
    }

现在,如果通过选择第一个 Controller 中屏幕底部的行(不一定是最后一行)来推送第二个 UITableViewController,则该行不会自动当用户立即或最终返回到第一个 Controller 时取消选择。

此外,无法通过在 viewWillAppear:viewDidAppear: 中的 self.tableView 上调用 deselectRowAtIndexPath:animated: 来取消选择该行: 在第一个 Controller 中。

我猜这是 UITableViewController 的绘制代码中的一个错误,它当然只绘制可见行,但不幸的是无法正确确定在这种情况下最底行是否可见。

我在 Google 或 OpenRadar 上找不到任何相关信息,并且想知道 SO 上是否有其他人遇到此问题或知道解决方案/解决方法。

最佳答案

我也遇到了同样的问题(尽管我没有使用工具栏)。我的解决方案是在推送第二个 View Controller 后取消选择 didSelectRowAtIndexPath 中的行。

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
RunViewController *runViewController = [[RunViewController alloc] initWithNibName:@"RunViewController" bundle:nil];
runViewController.managedObjectContext = self.managedObjectContext;
runViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:runViewController animated:YES];
[runViewController release];

//deslect "stuck" row
[aTableView deselectRowAtIndexPath:indexPath animated:YES];
}

关于iphone - 奇怪的 UIKit 错误, TableView 行保持选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com