我正在構建一種格式,用戶必須在該格式上繪制簽名,如果為空SwiftUI,則不得繼續前進。PKCanvasView我正在嘗試通過使用禁用下一個按鈕:.disabled(pkCanvasView.drawing.bounds.isEmpty)但這種情況總是回傳true,所以按鈕總是被禁用。但是,如果我嘗試以下操作,似乎情況正在發揮作用。
Button(text: "SAVE") {
if pkCanvasView.drawing.bounds.isEmpty {
showAlert = true //CONDITION WORKS
} else {
//Do something else
}
}
因此,如果畫布為空,則會顯示警報,但在這種情況下,我不能使用警報,必須禁用該按鈕。關于如何通過使用該.disabled()屬性來實作這一目標的任何想法?
編輯:
這就是我包裹PKCanvasView在一個UIViewRepresentable
struct SignatureCanvas: UIViewRepresentable {
@Binding var canvas: PKCanvasView
func makeUIView(context: Context) -> PKCanvasView {
canvas.drawingPolicy = .anyInput
canvas.tool = PKInkingTool(.pen, color: .black, width: 10)
return canvas
}
func updateUIView(_ canvasView: PKCanvasView, context: Context) { }
func checkIfEmpty() -> Bool {
if canvas.drawing.strokes.isEmpty {
return true
} else {
return false
}
}
}
uj5u.com熱心網友回復:
您需要使用 PKCanvasView 委托來實作協調器模式。
struct SignatureCanvas: UIViewRepresentable {
@Binding var canvas: PKCanvasView
@Binding var flag: Bool
//Create the coordinator and assign it to the context
func makeCoordinator() -> Coordinator {
Coordinator(flag: $flag)
}
func makeUIView(context: Context) -> PKCanvasView {
canvas.drawingPolicy = .anyInput
canvas.tool = PKInkingTool(.pen, color: .black, width: 10)
//assign coordinator as delegate
canvas.delegate = context.coordinator
return canvas
}
func updateUIView(_ canvasView: PKCanvasView, context: Context) {}
func checkIfEmpty() -> Bool {
if canvas.drawing.strokes.isEmpty {
return true
} else {
return false
}
}
}
// the coordinator storing the binding and implementing the delegate
class Coordinator: NSObject {
@Binding var flag: Bool
init(flag: Binding<Bool>) {
self._flag = flag
}
}
extension Coordinator: PKCanvasViewDelegate {
//gets called when the drawing changes
func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
//update the binding
flag = canvasView.drawing.strokes.isEmpty
}
}
在您的內容視圖中
VStack {
SignatureCanvas(canvas: $canvas, flag: $flag)
Button(text: "SAVE") {
}
.disabled(flag)
}
當然,您需要 Contentview 中的適當狀態變數
@State private var flag: Bool = true
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/421196.html
標籤:
