#swift #swiftui
Вопрос:
К сожалению, я не могу добавить swipeActions в этот элемент строки. Я перепробовал много образцов, но они все равно не появляются. В документации также показан пример с пользовательским элементом. Я не вижу разницы в своем проекте. Если бы вы могли мне помочь, это было бы здорово. Я новичок в свифте.
Заранее спасибо
импорт SwiftUI
структура SearchBarNew: Просмотр {
var urlToSubmitLoginToLocal: String = "localhost:8080/search/" @State private var arrayForSearchResult: [SearchBarBackEndData] = ExampleDataSearch.peopleDummyDataOfSearch @State private var isHidden = true @State private var searchText = "" @State private var showCancelButton: Bool = true let animationDuration: TimeInterval = 0.45 let trackerRotation: Double = 2.585 @State var isAnimating: Bool = false @State var taskDone: Bool = false @State var submitScale: CGFloat = 1 @State var currentUserInteractionCellID: String? var body: some View { NavigationView { VStack { VStack(spacing: 0){ HStack { HStack { Image(systemName: "magnifyingglass") TextField("search", text: $searchText, onEditingChanged: { isEditing in self.showCancelButton = false }, onCommit: { isHidden = false loadDataForSearchFromBackEnd(textInputSearch: searchText) }).foregroundColor(.primary) Button(action: { self.searchText = "" }) { Image(systemName: "xmark.circle.fill").opacity(searchText == "" ? 0 : 1) } } .padding(EdgeInsets(top: 8, leading: 6, bottom: 8, trailing: 6)) .foregroundColor(.secondary) .background(Color(.secondarySystemBackground)) .cornerRadius(10.0) if showCancelButton { Button("Cancel") { UIApplication.shared.endEditing(true) // this must be placed before the other commands here self.searchText = "" self.showCancelButton = false } .foregroundColor(Color(.systemBlue)) } } .padding(.horizontal) .navigationBarHidden(showCancelButton) .navigationBarTitle(Text("Search")) .resignKeyboardOnDragGesture() } List{ VStack{ ForEach(arrayForSearchResult, id: .self) { item in RowViewSearchBarResult(item: item) } .swipeActions { Button { print("Message deleted") } label: { Label("Delete", systemImage: "trash") } .tint(Color.red) } .onTapGesture { print("tapped item") } } } } } } func loadDataForSearchFromBackEnd(textInputSearch: String){ let url = URL(string: urlToSubmitLoginToLocal searchText)! if url != nil { print("Contains a value!") } else { // url = URL.init(urlToSubmitLoginToLocal "Clarity") print("Error") } var request = URLRequest(url: url) request.setValue("text/plain", forHTTPHeaderField: "Content-Type") request.httpMethod = "Get" URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, let response = response as? HTTPURLResponse, error == nil else { // check for fundamental networking error print("error", error ?? "Unknown error") return} do { //print("Data Search: ") let jsonDecoder = JSONDecoder() let decodedData = try jsonDecoder.decode([SearchBarBackEndData].self, from: data) //print(decodedData[0]._id) arrayForSearchResult = decodedData //print("Size: (arrayForSearchResult.count)") } catch let error { print("There is a error while decoding your JSON Model") print(error) } }.resume() }
}
структура rowviewsearchbarрезультат: Просмотр{ @Состояние var элемент: SearchBarBackEndData
var body: some View { VStack{ HStack(spacing: 20){ let str = item.metadata.image if let data = Data(base64Encoded: str), let uiImage = UIImage(data: data) { Image(uiImage: uiImage) .resizable() .scaledToFit() .frame( height: 70) .cornerRadius(4) .padding(.vertical, 4) } else { let _ = print("FAIL") } VStack (alignment: .leading, spacing: 5) { Text(item.metadata.title) .fontWeight(.semibold) .lineLimit(/*@START_MENU_TOKEN@*/2/*@END_MENU_TOKEN@*/) .font(.headline) .minimumScaleFactor(5) Text(item.metadata.author) .font(.subheadline) .foregroundColor(.secondary) } } } }
}