Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

102
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda