Pergunta

Estou tentando alterar as imagens do meu TabBar em um ViewController, mas, para exibir as novas imagens, devo clicar em cada item da barra da guia.

for (CustomTabBarItem *myItem in self.tabBarController.tabBar.items){
        myItem.enabled = YES; 

        myItem.badgeValue = @"1"; 

        UIImage *myImage =  [[UIImage alloc] initWithContentsOfFile:[[DesignManager sharedManager] getPathOfFile:@"test.png"]];

        *myItem.imageSelect= *myImage; // change images of each item. don't appear if I dont click on the item
}

Alguém sabe como posso exibir diretamente essas imagens? Obrigado

Foi útil?

Solução

Você precisa substituir o item antigo da barra de guias por um novo. Você não pode atualizar a imagem dinamicamente.

A maneira mais fácil de fazer isso é definir a propriedade TabBaritem do controlador de visualização representado por uma determinada guia. Se você quiser fazer isso dentro desse controlador de exibição, basta escrever:

self.tabBarItem = [[UITabBarItem alloc] initWithTitle: @"title" image: myImage: tag: nil];

Ou você pode fazer isso de outro lugar, digamos o delegado do seu aplicativo:

UIViewController* vc = [tabBarController.viewControllers objectAtIndex: 3];
vc.tabBarItem = [[UITabBarItem alloc] initWithTitle: @"title" image: myImage: tag: nil];

Outras dicas

Eu sei que essa é uma pergunta antiga. Encontrei o mesmo problema quando preciso atualizar o valor do crachá de outra guia ativa. Criando outro UITabBarItem Resolverá seu problema atual, mas causa vazamento potencial de memória quando esse código for chamado muitas vezes. Além disso, quando outros controladores de exibição acessam a guia, eles não têm referência a recém -criados UITabBarItem. Meu truque é

vc.tabBarItem = vc.tabBarItem; 

Funciona para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top