如何为 SwiftUI 预览修改 UIView 属性?
How to modify UIView properties for SwiftUI preview?
我有一个 UIView
,其中包含 2 个标签和一个用于绑定的变量,如下所示:
var count: String? {
get { viewCountLabel.text }
set {
viewCountLabel.text = newValue
viewsTitleLabel.text = newValue == "1" ? "View" : "Views"
}
}
和 convenience init
喜欢:
convenience init(count: String) {
self.init()
self.count = count
}
此视图符合UIViewRepresentable
如下:
extension ViewCountView: UIViewRepresentable {
typealias UIViewType = ViewCountView
func makeUIView(context: Context) -> UIViewType {
UIViewType(frame: .zero)
}
func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<UIViewType>) {}
}
这对目标有效。
- 问:我应该如何将计数传递给实时视图中的预览?
我尝试像下面这样在预览的初始值设定项上传递计数,但它不起作用。我想我应该以某种方式以 Context
的形式传递 count
。
struct ViewCountView_Previews: PreviewProvider {
static var previews: some View {
Group {
ViewCountView(count: "0")
ViewCountView(count: "12m")
ViewCountView(count: "41234")
}
}
请注意因为我需要超过 1 个预览,所以我不能写值静态 在 makeUIView
或 updateUIView
.
内
将绑定变量添加到您的 UIViewRepresentable
:
@Binding var count: String
然后更改updateUIView
:
func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<UIViewType>) {
uiView.count = count
}
简单的包装器结构 - 像本地人一样工作:
struct <#NameOfTheWrapperView#>: UIViewRepresentable {
typealias TheUIView = <#AnyUIView#>
var configuration = { (view: TheUIView) in }
func makeUIView(context: UIViewRepresentableContext<Self>) -> TheUIView { TheUIView() }
func updateUIView(_ uiView: TheUIView, context: UIViewRepresentableContext<Self>) {
configuration(uiView)
}
}
完全可定制
ResponderTextField() {
[=11=].backgroundColor = .red
[=11=].tintColor = .blue
}
因此 [=12=]
指向确切的类型,并且可以像最初在 UIKit
中那样进行编辑。
注意 我把它做成了 gist,所以你可以很容易地复制并粘贴到你的代码中,只需要给它命名并定义原来的 UIView
你需要使用的类型。
我有一个 UIView
,其中包含 2 个标签和一个用于绑定的变量,如下所示:
var count: String? {
get { viewCountLabel.text }
set {
viewCountLabel.text = newValue
viewsTitleLabel.text = newValue == "1" ? "View" : "Views"
}
}
和 convenience init
喜欢:
convenience init(count: String) {
self.init()
self.count = count
}
此视图符合UIViewRepresentable
如下:
extension ViewCountView: UIViewRepresentable {
typealias UIViewType = ViewCountView
func makeUIView(context: Context) -> UIViewType {
UIViewType(frame: .zero)
}
func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<UIViewType>) {}
}
这对目标有效。
- 问:我应该如何将计数传递给实时视图中的预览?
我尝试像下面这样在预览的初始值设定项上传递计数,但它不起作用。我想我应该以某种方式以 Context
的形式传递 count
。
struct ViewCountView_Previews: PreviewProvider {
static var previews: some View {
Group {
ViewCountView(count: "0")
ViewCountView(count: "12m")
ViewCountView(count: "41234")
}
}
请注意因为我需要超过 1 个预览,所以我不能写值静态 在 makeUIView
或 updateUIView
.
将绑定变量添加到您的 UIViewRepresentable
:
@Binding var count: String
然后更改updateUIView
:
func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<UIViewType>) {
uiView.count = count
}
简单的包装器结构 - 像本地人一样工作:
struct <#NameOfTheWrapperView#>: UIViewRepresentable {
typealias TheUIView = <#AnyUIView#>
var configuration = { (view: TheUIView) in }
func makeUIView(context: UIViewRepresentableContext<Self>) -> TheUIView { TheUIView() }
func updateUIView(_ uiView: TheUIView, context: UIViewRepresentableContext<Self>) {
configuration(uiView)
}
}
完全可定制
ResponderTextField() {
[=11=].backgroundColor = .red
[=11=].tintColor = .blue
}
因此 [=12=]
指向确切的类型,并且可以像最初在 UIKit
中那样进行编辑。
注意 我把它做成了 gist,所以你可以很容易地复制并粘贴到你的代码中,只需要给它命名并定义原来的 UIView
你需要使用的类型。