在iOS中,当表视图的分段索引被点击时,是否有一个委托方法被调用?例如,如果表格的分段索引列出字母A-Z并且点击了B,我该如何确定用户点击了哪个字母?我已经在文档中查找了很久,但是没有找到相关信息。
frame #1: UIKit`-[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 56
frame #2: UIKit`-[UIScrollView setContentOffset:] + 645
frame #3: UIKit`-[UITableView setContentOffset:] + 362
frame #4: UIKit`-[UIScrollView(UIScrollViewInternal) _setContentOffset:animated:animationCurve:animationAdjustsForContentOffsetDelta:] + 669
frame #5: UIKit`-[UITableView _sectionIndexChangedToIndex:title:] + 285
frame #6: UIKit`-[UITableView _sectionIndexChanged:] + 189
因此,UITableView
有一个私有方法_sectionIndexChanged
。此外,在索引更改后,UITableView
内部调用setContentOffset
。这两者都可以用来提供确定何时单击节索引的机制。
如果我在做这件事情,我可能会子类化UITableView
来拦截_sectionIndexChanged
并扩展UITableViewDelegate
协议以提供所需的消息。或者,您可以子类化UITableView
并拦截setContentOffset
,但是这将需要处理没有单击索引而调用setContentOffset
的特殊情况。
scrollViewDidScroll:
以显示和更新 HUD(指“正在加载中”等提示信息),如果偏移已更改。当然,这将导致在用户滚动而没有索引时出现它。您可以通过简单地禁用 HUD 的显示来防止大多数这些情况,当滚动视图的 dragging
或 decelerating
属性为 YES 时。仍会有一些情况下 HUD 会出现 (例如 scrollToTop、resizing),但这可能对您是可以接受的。UITableView
并覆盖touchesBegan:…
方法以检测用户手指的位置。这将允许您仅在用户的手指位于表视图右侧时显示HUD。(您甚至可能不需要实现scrollViewDidScroll:
。) - Aaron Brager