gpt4 book ai didi

ios - 是什么阻止了 UITableView 索引的出现?

转载 作者:行者123 更新时间:2023-12-02 06:00:24 26 4
gpt4 key购买 nike

我有一个 UITableView,其中有一个带有可见 ScopeBar 的 SearchBar。我已经实现了所有必需的委托(delegate)和数据源方法来支持表索引。然而,当显示 TableView 时,没有显示任何部分索引。当显示搜索结果表时,会显示部分索引。

我实现了 this answer 中的代码片段并确认主表实际上已建立索引。

我真的很困惑。日志记录表明一切都已就绪,可以完成这项工作,但我一生都无法弄清楚为什么主表不显示索引。是的,主表的索引已设置;我可以在我的日志中看到它们。

对于主表,我可以看到索引标题被请求并返回,但没有显示。

对于搜索结果表,会出现相同的日志记录(请求并返回标题),并且它们会被显示。

需要注意的一件事是,尽管我看不出这会如何导致表中的索引不出现,但 SearchBar 类实际上是一个子类,它只是重写 setShowsScopeBar: 以强制将其设置为"is"。我尝试了使用和不使用此覆盖的应用程序。结果相同:主 TableView 中没有索引。

所以问题是:即使支持索引的所有必需的委托(delegate)和数据源方法都已就位(并且至少适用于搜索结果表,因为调用这些方法并且显示该 View 的索引。)

谢谢!

最佳答案

这么多个月过去了,这是这个问题的解决方案。

首先,iOS 4.3 SDK 中的 -reloadSectionIndexTitles 似乎仍然没有对(重新)在 View 中显示部分索引标题执行任何操作。我仍然必须使用 -reloadData,这很不幸,但最终还是可以的。 (还没有在任何较新的 iOS 版本下尝试过,FWIW...)

现在,最初的问题是索引标题出现在屏幕右边缘的上半部分,就像显示键盘一样。但没有显示键盘!

所以我开始思考:什么让键盘显示出来?第一响应者会标记一些通常会导致键盘显示的内容! (或者,其他东西错误地表明键盘正在显示。)在我看来,唯一可以做到这一点的是搜索栏。

这里是情节变得更加复杂的地方。我的搜索栏有一个范围栏,我希望它始终可见。这是非标准的。为此,我对 UISearchBar 进行了子类化并覆盖了 -searchBar:setShowsScopeBar::

- (void) setShowsScopeBar:(BOOL) show{    [super setShowsScopeBar: YES]; // always show!    [self resignFirstResponder];}

我的初始实现不包括对 resignFirstResponder 的调用。因此,每当在我的 UISearchBar 实例上调用此方法(只是告诉父类(super class)将范围栏设置为可见)时,搜索栏(或者可能是范围栏)就会被标记为第一响应者,但不会显示键盘。据我所知,这反过来会产生这样的效果:当 TableView 显示部分索引标题时,它认为某物是第一响应者并呈现压缩的索引。表格的最后一行允许在屏幕中间上方向上滚动这一事实进一步证明了表格 View 部分的错误假设 - 就像显示键盘一样!

添加对 resignFirstResonder 的调用通过清除错误设置以指示(某处)显示键盘的任何状态来解决该问题。现在,索引以全屏高度显示,正如预期的那样。

非常。奇怪的。

我花了很多时间来解决这个问题。也许这种行为是我的实现的副产品,这无疑是非标准的(范围栏的行为更像是 UISegmentedControl 的 3 个选项中的 2 个)。无论如何,在我添加对 resignFirstResponder 的调用之前的行为至少是意外的。

我想我应该为将来可能偶然发现此问题的任何人发布该解决方案。希望对您有所帮助。

关于ios - 是什么阻止了 UITableView 索引的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340699/

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