DSFPagerControl

 

一个简单的 macOS 分页控件。

Swift Package Manager

为什么?

考虑到 macOS 拥有 NSPageController 控件,我有点惊讶居然没有内置的控件来显示分页器(那些点)。

所以这里提供了一个相对简单的、可直接使用的封装版本。

特性

该控件旨在通过以下方式驱动:-

安装

使用 Swift Package Manager,将 https://github.com/dagronf/DSFPagerControl 添加到您的项目。

属性

这些属性中有许多是 @IBInspectable,因此当 Apple 修复了包 NSView 的 IBDesignable 支持后,您可以直接在 Interface Builder 中设置它们(Boooo! - 已经五年了 - FB8358478)。

如果您将包源文件复制到您的项目中,IBDesignables 将按预期显示。

名称 类型 描述
orientation Orientation (方向) 页面控件是垂直方向还是水平方向?
pageCount Int (整数) 控件中要显示的页面指示器的数量
selectedPage Int (整数) 当前页面选择 (可观察)
selectedColor NSColor? (NSColor 可选类型) 绘制选定页面的颜色(nil 表示使用默认颜色)
unselectedColor NSColor? (NSColor 可选类型) 绘制未选定页面的颜色(nil 表示使用默认颜色)
bordered Bool (布尔值) 如果为 true,则在未选定的页面指示器周围绘制边框)
boundsSize CGSize (CGSize 类型) 页面指示器的大小
dotSize CGFloat (CGFloat 类型) 要显示在页面指示器中心的点的大小
allowsKeyboardSelection Bool (布尔值) 允许用户使用键盘来聚焦和更改页面选择
allowsMouseSelection Bool (布尔值) 允许用户使用鼠标来更改页面选择

可观察对象

这些是可以观察变化的成员变量

名称 类型 描述
pageCount Int (整数) 页面数量
selectedPage Int (整数) 选定的页面
isFirstPage Bool (布尔值) 选择是否是第一页?
isLastPage Bool (布尔值) 选择是否是最后一页?

委托

func pagerControl(_ pager: DSFPagerControl, willMoveToPage page: Int) -> Bool

当用户尝试更改分页控件的选择时,以及被要求更改到新页面时调用。 您可以通过返回 false 来拒绝页面更改

请注意,仅当 allowsKeyboardFocus 时才调用此方法

func pagerControl(_ pager: DSFPagerControl, didMoveToPage page: Int)

当分页控件已更改为新页面时调用。

SwiftUI 支持

您可以使用 DSFPagerControlUI 在 SwiftUI 中创建分页控件

DSFPagerControlUI(
   pageCount: 10,
   selectedPage: $selection,
   allowsMouseSelection: true
)

请参阅 Demo 子文件夹中的 SwiftUI 演示。

用户交互

该控件可以选择性地支持键盘和鼠标交互。 当用户与控件交互时,您可以通过使用委托来决定是否执行更改。

键盘

allowsKeyboardSelection 为 true 时,控件将接受焦点事件并响应以下键:-

当按下某个键时,将调用委托 (willMoveToPage) 来询问更改是否有效。 如果是,则分页器将更新其显示并调用委托上的 didMoveToPage

鼠标

allowsMouseSelection 为 true 时,当鼠标悬停在控件上时,光标将变为手形。

当用户单击页面指示器时,将调用委托 (willMoveToPage) 来询问更改是否有效。 如果是,则分页器将更新其显示并调用委托上的 didMoveToPage

自定义颜色支持

默认情况下,DSFPagerControl 提供标准的颜色调色板,自动适应用户的浅色/深色模式和对比度设置。

如果您想自定义显示,该控件提供了两个块回调,您可以提供这些回调来返回您自己的自定义颜色以用于选定和未选定状态。

selectedColorBlock

提供一个块,该块返回用于绘制选定页面指示器的自定义颜色。

unselectedColorBlock

提供一个块,该块返回用于绘制未选定页面指示器的自定义颜色。

许可证

MIT。 随意使用和滥用它,只要注明我的作品即可。 如果您在某个地方使用了它,请告诉我,我很乐意听到!

MIT License

Copyright (c) 2024- Darren Ford

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.