在 SwiftUI 中,由于视图,我们很幸运拥有一个原生颜色选择器ColorPicker()。不幸的是,它的工作方式是视图覆盖在它所放入的框架内......我可以处理这个问题,这不是问题。我无法修复的是通过按钮激活视图并摆脱默认的圆形按钮。
我想要完成的事情,如图所示:
按下按钮...
好吧,没有直接的 SwiftUI 公共 API,所以
免责声明:以下内容仅用于演示目的,如果您将其用于实际项目中,所有后果均由您承担!
现在很明显,这种方法一半是hacky,一半是因为没有使用私有API,但是-hacky是因为我们对运行时进行了逆向工程。
让我们开始吧... ColorPickeris 只是 的包装器UIColorWell,即UIControl,但它不执行任何控制操作,它只是一个容器,UIButton里面有一个容器。因此,我们只需要找到该按钮并在需要时激活其操作,同时隐藏丑陋的东西。 ColorPicker
主要部分:
extension UIColorWell {
override open func didMoveToSuperview() {
// ...
// find a button and store handler with it in helper
if let uiButton = self.subviews.first?.subviews.last as? UIButton {
UIColorWellHelper.helper.execute = {
uiButton.sendActions(for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)
和用途
Button {
// call action in helper
UIColorWellHelper.helper.execute?() // << here !!
} label: {
Text("Show Color Picker")
}
.buttonStyle(.borderedProminent)
.background(
// hide standard picker in background
ColorPicker("", selection: $color, supportsOpacity: false)
.labelsHidden().opacity(0)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |