Here is the solution.
Instead of using onTapGesture, I used a Observable class where I stored all the data from the tag.
struct NFCWriteButton : UIViewRepresentable {
@Binding var data: String
@ObservedObject var dataToWrite: NFCData
func updateUIView(_ uiView: UIButton, context: Context) { }
func makeUIView(context: UIViewRepresentableContext<NFCWriteButton>) -> UIButton {
let button = UIButton()
button.setTitle("Write on Tag", for: .normal)
button.addTarget(context.coordinator, action: #selector(context.coordinator.beginScan(_:)), for: .touchUpInside)
return button
}
func makeCoordinator() -> NFCWriteButton.Coordinator {
return Coordinator(data: $data, toWrite: _dataToWrite)
}
class Coordinator: NSObject, NFCNDEFReaderSessionDelegate {
var session : NFCNDEFReaderSession?
@ObservedObject var dataToWrite: NFCDataSec = NFCDataSec()
@Binding var data: String
@ObservedObject var nfcData: NFCData
@objc func beginScan(_ sender: Any) {
guard NFCNDEFReaderSession.readingAvailable else {
print("error: Scanning not support")
return
}
session = NFCNDEFReaderSession(delegate: self, queue: .main, invalidateAfterFirstRead: true)
session?.alertMessage = "Hold your iphone near to scan."
session?.begin()
}
init(data: Binding<String>, toWrite: ObservedObject<NFCData>) {
_data = data
_nfcData = toWrite
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: