我有一个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>) {}
}
这可以按预期对目标起作用。
我尝试将计数传递给预览的初始化程序,如下所示,但它不起作用。我认为我应该以某种方式以count
的形式通过Context
。
struct ViewCountView_Previews: PreviewProvider {
static var previews: some View {
Group {
ViewCountView(count: "0")
ViewCountView(count: "12m")
ViewCountView(count: "41234")
}
}
请注意,因为我需要多个预览,所以我不能 静态地在makeUIView
或{ {1}}。
答案 0 :(得分:0)
将绑定变量添加到您的UIViewRepresentable
:
@Binding var count: String
然后更改updateUIView
:
func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<UIViewType>) {
uiView.count = count
}
答案 1 :(得分:0)
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() {
$0.backgroundColor = .red
$0.tintColor = .blue
}
因此$0
指向确切的类型,可以像最初在UIKit
中一样进行编辑。
请注意,我将其制作为gist,因此您可以轻松地将其复制并粘贴到您的代码中,只需命名并定义原始的UIView
类型您需要使用。