AlphabetSlider 版本 3.0.7

AlphabetSlider 版本 3.0.7

测试已测试
语言语言 SwiftSwift
许可证 NOASSERTION
发布最后发布2020年8月
SPM支持SPM

Raphael Traviss 维护。




AlphabetSlider 版本 3.0.7

  • Raphael Traviss

Alphabet Slider

提供了一种增量滑块,允许用户从您选择的任何任意值中选择--字母、数字、数值或其他任何值。将其连接到UICollectionView或UITableView,用作快速滚动到各个节区的索引。当用户在表格或集合中滚动时,您可以使用代理方法更新此滑块值,这是一种显示用户对表格或集合整体进度的不错的方式。

alt tag

为何要使用这个?

  • 您希望加载自己的任意标签的增量滑块
  • 您需要UICollectionView的索引
  • 除了UITableView提供的常规索引外,您还需要UITableView的索引
  • 您需要UIScrollView的索引

如何安装这个?

通过CocoaPods安装: pod 'AlphabetSlider' 确保您的Podfile顶部已经声明了 !use_frameworks

通过复制粘贴安装: 复制AlphabetSlider文件夹内部的所有文件到您的项目中;请参考示例项目。您可能需要将 AlphabetSlider 添加到您项目中的嵌入的二进制文件。

无论您选择哪种安装方法,您可能都需要构建一次项目,以便Xcode能够识别新的库。

您可以用它来做些什么?

  • 通过界面构建器设置自己的字体、颜色和偏移量
  • 通过alphabet属性设置自己的任意标签,该属性接受一个字符串数组。

您会如何实现这个功能?

通过一个实际例子来解释

  1. git pull此项目
  2. 打开根目录中的xcworkspace,其中包含AlphabetSlider项目和示例项目。
  3. 构建AlphabetSliderExample项目

通过说明来解释

  1. 在故事板中,从一个UIView拖拽出来并将其放置在视图控制器内部某个位置。
  2. 将此视图的类设置为从模块AlphabetSlider中的AlphabetSlider
  3. 将IBoutlet拖拽到视图控制器的代码中
  4. 在视图控制器的viewDidLoad方法中,将outlet的alphabet属性设置为任何您选择的字符串数组。
  5. viewDidLoad方法中,调用outlet的addTarget方法将自定义函数连接到ValueChanged事件。

您会如何使用它作为UICollectionView、UITableView或UIScrollView的索引视图?

查看示例项目中的实现,其实现尽可能简单。

本质上,您希望在索引视图上发生以下两件事

  1. 当索引视图被触摸或滚动时,滚动收藏夹视图。
  2. 当收藏夹视图滚动时,更新索引视图。

这是通过使用collectionView(willDisplayCell:)your_slider.addTarget(forControlEvents:)来实现的。

在理想的世界里,这应该足够了,但不幸的是,由于它们控制相同的可滚动区域,滚动视图和索引必须共享状态才能一起工作。这将在下一节中解释。

避免事件冲突

GitHub上很少见到UIScrollView索引视图的很好的原因:索引和滚动视图需要共同工作并共享状态,因为它们控制的是同一个可滚动区域。

该解决方案在索引视图中包含两个属性:`userIsUsing`和`scrollViewIsUsing`。这两个属性组合在一起作为关注属性,它会告诉索引视图用户是否最后触摸了滚动视图或索引视图,如果没有焦点它将停止发送事件。

另一面是,当用户正在使用索引视图时,滚动视图需要停止向索引视图发送事件。

以下是从示例中提取的重要方法:

// When a user is scrolling the collection, update the index view's value.
	func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
		// This will update the index slider's value, but it won't send out the ValueChanged
		// event if scrollViewIsUsing is true.
		guard !indexSlider.userIsUsing else { return }
		indexSlider.value = indexPath.section
	}
	
	func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
		indexSlider.userIsUsing = false
		indexSlider.scrollViewIsUsing = true
	}
	
	func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
		indexSlider.scrollViewIsUsing = false
	}
	

未来展望是什么?

  1. 测试!
  2. 垂直索引
  3. 更精确的位置和滚动

####享受!