Hello,
I have a code that makes a http Request, gets an array with filenames from that, displays them each with an image and the filename below. Everything works fine.
Now I made each image a button that opens a detail page.
That works but at the top it should say the matching filename from the page before.
But I am not able to hand over the filename (name) from ContentView4 to the next page (ts).
Could you please help me?
Thanks
Nikias
Here is my code:
I have a code that makes a http Request, gets an array with filenames from that, displays them each with an image and the filename below. Everything works fine.
Now I made each image a button that opens a detail page.
That works but at the top it should say the matching filename from the page before.
But I am not able to hand over the filename (name) from ContentView4 to the next page (ts).
Could you please help me?
Thanks
Nikias
Here is my code:
Code Block import SwiftUI struct ContentView4: View { @State var showingDetail = false @State var username: String = "." @State var password: String = "." @State private var name = String("Nikias2") @State private var t = String() @State var dateien = ["word.png", "vi.png", "text.png", "pp.png", "pdf.png", "ordner.png", "ex.png", "datei.png", "bild.png"] var body: some View { ScrollView(.vertical) { ZStack{ VStack { ForEach(0 ..< dateien.count, id: \.self) { Button(action: { print("button pressed") t = dateien[1] self.showingDetail.toggle() }) { Image("datei") } .scaledToFit() .padding(0) Text(self.dateien[$0]) Text(t) .foregroundColor(.white) } } } .sheet(isPresented: $showingDetail) { ts(name: t) } .onAppear { //# This `onAppear` is added to `ZStack{...}` doHttpRequest() } } } func doHttpRequest() { let myUrl = URL(string: "http://192.168.1.180/int.php")! //# Trailing semicolon is not needed var request = URLRequest(url: myUrl) request.httpMethod = "POST"// Compose a query string let postString = "Name=\($username)&Passwort=\($password)" request.httpBody = postString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { (data, response, error) in //# Use if-let when you want to use the unwrapped value if let error = error { print("error=\(error)") return } //# Use guard-let when nil has no meaning and want to exit on nil guard let response = response else { print("Unexpected nil response") return } // You can print out response object print("response = \(response)") //Let's convert response sent from a server side script to a NSDictionary object: do { //# Use guard-let when nil has no meaning and want to exit on nil guard let data = data else { print("Unexpected nil data") return } //#1 `mutableContainer` has no meaning in Swift //#2 Use Swift Dictionary type instead of `NSDictionary` let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] if let parseJSON = json { // Now we can access value of First Name by its key //# Use if-let when you want to use the unwrapped value if let firstNameValue = parseJSON["Name"] as? String { print("firstNameValue: \(firstNameValue)") let dateien = firstNameValue.components(separatedBy: ",") print(dateien) self.dateien = dateien } } } catch { print(error) } } task.resume() } } struct TestView_Previews: PreviewProvider { static var previews: some View { ContentView4() } } struct ts: View { var name: String var body: some View { NavigationView { VStack { Text(name) .font(.system(size: 60)) .foregroundColor(.black) .padding(50) Text("+") .font(.headline) .foregroundColor(.white) .padding() .frame(width: 220, height: 60) .background(Color.yellow) .cornerRadius(35.0) Text("Datei herunterladen") .font(.headline) .foregroundColor(.white) .padding() .frame(width: 220, height: 60) .background(Color.blue) .cornerRadius(35.0) Text("Datei umbenennen") .font(.headline) .foregroundColor(.white) .padding() .frame(width: 220, height: 60) .background(Color.green) .cornerRadius(35.0) Text("Datei löschen") .font(.headline) .foregroundColor(.white) .padding() .frame(width: 220, height: 60) .background(Color.red) .cornerRadius(35.0) } } } }