MYTableViewIndex
MYTableViewIndex 是对UITableView部分索引的重写。这个控件通常出现在显示联系人的应用、歌曲、以及其他按字母顺序排序的数据应用中。MYTableViewIndex 完美复制了原生 iOS 部分索引,但也支持显示图片以及额外的可定制功能。
特性
- 可以显示图片
- 完全可定制:使用自定义字体、背景视图,添加您自己的项目类型
- 与任何 UIScrollView 子类兼容
- 与 UITableViewController 和 UICollectionViewController 正确工作
- 自动布局、管理内间距和避免键盘冲突(通过 TableViewIndexController)
- 支持从右向左的语言
- 支持触觉反馈
- 支持无障碍访问
以下是一些特性的截图
使用
1. 实例化
手动设置
该组件是UIControl子类,可作为任何其他视图使用,只需将其添加到视图层次结构即可。这可以通过Interface Builder或代码完成
let tableViewIndex = tableViewIndex(frame: CGRect())
view.addSubview(tableViewIndex)
请注意,在这种情况下,不自动执行布局,所有所需索引视图对齐完全由您决定。
使用TableViewIndexController
当处理UITableViewController/UICollectionViewController时,事情变得更加复杂。这些视图控制器的根视图是UIScrollView的后代,将其用作TableViewIndex的父视图通常是一个糟糕的主意,因为UIScrollView默认会延迟触摸交付。
引入TableViewIndexController。当使用它时,它会创建一个TableViewIndex实例,将其添加到层次结构中作为根视图的兄弟视图,并设置布局。控制器还观察UIScrollView的间距并相应地更新索引视图的大小。例如,当键盘显示时,这很有意义。
您还可以使用控制器来隐藏TableViewIndex以显示某些表格部分,例如Apple曾在其音乐应用中做过
使用TableViewIndexController,设置可以在一行代码中完成
let tableViewIndexController = TableViewIndexController(scrollView: tableView)
2. 数据源
要为索引视图提供数据,只需简单地实现TableViewIndexDataSource协议的以下方法即可
func indexItems(for tableViewIndex: TableViewIndex) -> [UIView] {
return UILocalizedIndexedCollation.currentCollation().sectionIndexTitles.map{ title -> UIView in
return StringItem(text: title)
}
}
然后将它附加到索引视图上
tableViewIndexController.tableViewIndex.dataSource = dataSourceObject
有几种预定义的项目类型可用于显示字符串、图像、放大镜和截断符号。尽管如此,您仍然可以提供自己的项目类型。
3. 代理
为了响应用户在索引视图上的触摸操作并将表格滚动到所选部分,需要提供一个代理对象并实现以下方法
func tableViewIndex(_ tableViewIndex: TableViewIndex, didSelect item: UIView, at index: Int) -> Bool {
let indexPath = NSIndexPath(forRow: 0, inSection: sectionIndex)
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: false)
return true // return true to produce haptic feedback on capable devices
}
4. 定制化
MYTableViewIndex 完全可定制。查看 TableViewIndex 属性以获取更多详细信息。
示例
要运行示例项目,请克隆存储库,然后首先从 Example 目录运行 pod install
要求
- iOS 8.0+
- Swift 5.0
安装
CocoaPods
MYTableViewIndex 通过 CocoaPods 提供。要安装,只需将下面的行添加到 Podfile 文件中。
pod 'MYTableViewIndex'
手动安装
下载并将 MYTableViewIndex 文件夹中的所有 .swift 文件拖放到项目中。
Objective-C
MYTableViewIndex中所有公共类都暴露给Objective-C,只需导入库模块即可。
@import MYTableViewIndex;
别忘了在Podfile中启用框架
use_frameworks!
作者
Makarov Yuriy,[email protected]
许可证
MYTableViewIndex在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。