Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

96
Views
¿Cómo elimino limpiamente elementos de una lista de la barra lateral en SwiftUI en macOS?

Me gustaría dar a los usuarios la opción de eliminar los elementos de la List de la barra lateral de una aplicación SwiftUI en macOS.

Esto es lo que tengo actualmente:

 import Foundation import SwiftUI @main struct FoobarApp: App { @StateObject private var modelData = ModelData() var body: some Scene { WindowGroup { ContentView() .environmentObject(modelData) } .commands { } } } class ModelData: ObservableObject { @Published var myLinks = [URL(string: "https://google.com")!, URL(string: "https://apple.com")!, URL(string: "https://amazon.com")!] } struct ContentView: View { @EnvironmentObject var modelData: ModelData @State private var selected: URL? var body: some View { NavigationView { List(selection: $selected) { Section(header: Text("Bookmarks")) { ForEach(modelData.myLinks, id: \.self) { url in NavigationLink(destination: Text("Viewing detailed data for: \(url)") ) { Text(url.absoluteString) } .tag(url) } } } .onDeleteCommand { if let selection = selected { modelData.myLinks.remove(at: modelData.myLinks.firstIndex(of: selection)!) } } .toolbar { Button("Selected") { print(selected ?? "Nothing selected") } } Text("Choose a link") } .frame(minWidth: 200, minHeight: 500) } }

Cuando selecciono uno de los enlaces de la barra lateral y presiono el botón delete en mi teclado, el enlace se elimina, pero la vista detallada no siempre se borra.

Aquí hay un gif de lo que me refiero:

gif de comportamiento extraño

Me gustaría que la vista de detalles vuelva al texto predeterminado, Choose a link , después de que el usuario elimine un enlace. ¿Hay alguna manera de arreglar esto?

Además, noté que ContentView.selected no se borra después de que se elimina un enlace. ¿Es esto esperado? (Incluí un botón Selected que imprime el contenido de esta variable)

Estoy usando macOS 12.2.1 y Xcode 13.2.1.

Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La razón por la que esto no funciona es porque su Vista de destino a la derecha no se actualiza cuando cambia el Estado en su barra lateral. Mueva la lógica al modelo de vista y cree una vista designada que contenga la interfaz de usuario para los detalles.

  1. mueva la var seleccionada a su modelo de vista:

     class ModelData: ObservableObject { @Published var myLinks = [ URL(string: "https://google.com")!, URL(string: "https://apple.com")!, URL(string: "https://amazon.com")!] @Published var selected: URL? }
  2. crear una nueva vista para el destino:

     struct DestinationView: View{ @EnvironmentObject var modelData: ModelData var body: some View{ if let selected = modelData.selected{ Text("Viewing detailed data for: \(selected)") }else{ Text("Choose a link") } } }
  3. cambiar el destino de la vista de navegación:

     NavigationLink(destination: DestinationView() ) { Text(url.absoluteString) }
  4. cambia tu modificador ondelete:

     if let selection = modelData.selected { modelData.myLinks.remove(at: modelData.myLinks.firstIndex(of: selection)!) } modelData.selected = nil
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!