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

232
Visualizações
¿Cómo evitar que TabView vuelva a cargar la vista completa en los cambios de @StateObject?

Tengo una variable dentro de mi @StateObject que se usa para mostrar notificaciones de mensajes nuevos. Se actualiza periódicamente desde mi backend (push noti). El problema es que una vez que esta variable actualiza la insignia, sacará al usuario de otras pestañas inesperadamente (es decir, recarga todo el TabView y lo lleva a la primera pestaña). Quiero que la insignia de notificación se actualice sin interferir con lo que está haciendo el usuario. Intenté usar equatable() , pero fue en vano. Parece que TabView todo en los cambios de objetos de estado. ¿Hay alguna manera de recargar solo las etiquetas de las pestañas? cualquier ayuda será apreciada.

ContentView.swift :

 struct ContentView: View { @State var tab: UInt = 0 @StateObject var messenger: MessagingViewModel = MessagingViewModel() @State var firstAppear = true init() { UITabBar.appearance().backgroundColor = UIColor(Color.white) } var body: some View { TabView(selection: $tab) { HomeMarket(tab: $tab) .tabItem { Label("Market", systemImage: "house.fill") }.tag(0) AddItems(tab: $tab) .tabItem { Label("Add Item", systemImage: "plus.circle") }.tag(1) MessageList(tab: $tab) .tabItem { Label("Messages", systemImage: "envelope.fill") } .tag(2) .badge(messenger.newMsgCount) } .accentColor(Color("AccentColor")) .onAppear() { if firstAppear { messenger.getAllMessages() firstAppear = false } } .environmentObject(messenger) } }

MessengerViewModel.swift : (abreviado para SO. Incluso esta pequeña muestra causa el mismo problema)

 class MessagingViewModel: ObservableObject { @Published var newMsgCount = 0 init(){// connect socket...} func setUpChatListener() { DispatchQueue.main.async { self.manager.defaultSocket.on("Private Message") { data, ack in do { self.newMsgCount += 1 //do what ever else I need to do with the chat... } catch let err { print(err) } } } } }

Realmente me he topado con un obstáculo con este. ¿Voy a tener que usar el sistema push de Apple? Me resulta extraño que no pueda volver a cargar el pequeño icono para mostrar el recuento de mensajes nuevos en lugar de volver a cargar todo.

over 4 years ago · Santiago Trujillo
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