当 UITableView 处于输入搜索文本模式时,如何正确旋转和重新加载 UITableView?

发布于 2024-12-04 18:09:00 字数 490 浏览 0 评论 0原文

我正在实现 UITableViewController,它以纵向模式显示一个单元格,以横向模式显示两个单元格。我成功地重复使用带有标识符的单元格。另外,我有一个标志用于检查奇数记录并显示正确的记录数(在横向模式下省略右侧单元格)。另外,我正在使用搜索字段。

现在,我一切正常:表格正确旋转,搜索正确过滤记录。该问题出现在与输入搜索文本+旋转相关的情况下,例如:我正在启动应用程序,表格中充满了记录。然后,我在搜索字段中输入一些文本,然后过滤记录并在“textDidChange”中重新加载表格视图。该表成功过滤了3条记录。现在,我在输入搜索文本模式下旋转到横向模式。但现在,该表仅显示 2 条记录。

当我在输入搜索文本模式下开始旋转时,所有问题都会开始。该表遗漏了一些记录,在横向模式下遗漏了一些右侧单元格。我不知道它为什么会这样,因为我在“textDidChange”和“shouldAutorotateToInterfaceOrientation”方法中调用“[self.tableView reloadData]”。我缺少什么?

I'm implementing UITableViewController that displays one cell in portrait mode, and two cells in landscape mode. I'm successfully reusing cells with indetifiers. Also, I have a flag for checking odd number of records and displaying correct number of records (omitting right cell in landscape mode). Also, I'm using a search field.

Now, I have everything working: the table correctly rotates, search correctly filters the records. The problem appears on the situations related with enter-search-text + rotate, for example: I'm launching the app, the table fills with records. Then, I'm entering some text in search field, then filtering records and reloading tableview in "textDidChange". The table successfully filters 3 records. Now, I'm rotating to landscape mode while in enter-search-text mode. But now, the table displays only 2 records.

All the problems start when I'm starting to rotate while in enter-search-text mode. The table misses some records, misses some right cells in landscape mode. I don't know why it behaves because I'm calling "[self.tableView reloadData]" both in "textDidChange" and "shouldAutorotateToInterfaceOrientation" methods. What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情话已封尘 2024-12-11 18:09:00

我在此找到了解决方案(帖子)。似乎有两种不同的 tableView 用于显示表中的行:一种用于默认模式下的 self.tableView,另一种用于“self.searchDisplayController.searchResultsTableView”(如果您使用的是搜索控制器)。所以,我用这段代码解决了我的问题:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{

  if ([self.searchDisplayController isActive]){
    [self.searchDisplayController.searchResultsTableView reloadData];
  } else{
    [self.tableView reloadData];
  }
}

I have found the solution in this (post). It appears that there are two different tableViews for displaying rows in table: one for self.tableView in default mode and another one for "self.searchDisplayController.searchResultsTableView" (if you are using a search controller). So, I have fixed my problem with this code:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{

  if ([self.searchDisplayController isActive]){
    [self.searchDisplayController.searchResultsTableView reloadData];
  } else{
    [self.tableView reloadData];
  }
}
夜灵血窟げ 2024-12-11 18:09:00

您使用不同的 .xib 文件吗?另外,在 shouldAutorotateToInterfaceOrientation 中编写代码使用 didRotateToInterfaceOrientation: 代替也是一种不好的方法。

Are you using different .xib files? Also it's a bad way to write code in shouldAutorotateToInterfaceOrientation use didRotateToInterfaceOrientation: instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文