Alterar a cor selecionada do item da barra de guias em um storyboard

175

Quero alterar meus itens da barra de guias para rosa quando selecionados, em vez do azul padrão.

Como posso fazer isso usando o editor de storyboard no Xcode 6?

Aqui está minha configuração atual que não está funcionando, o fundo azul funciona, mas o rosa não funciona:

insira a descrição da imagem aqui

Deekor
fonte
Possível duplicata de tab-bar-item-tint-color !
User31
Marque esta resposta que irá ajudá-lo para a solução: stackoverflow.com/a/58727092/7804300
Talha Ahmed

Respostas:

408

Adicione o atributo Runtime Color chamado "tintColor" no StoryBoard. Isso está funcionando ( para o Xcode 8 e superior ).

se você quiser cores desmarcadas, pode adicionar unselectedItemTintColortambém.

definindo tintColor como atributo de tempo de execução

Mehul Thakkar
fonte
24
funcionou para mim quando adicionei essa propriedade ao UITabBarItem e não ao UITabBar.
precisa saber é o seguinte
1
Mas como você define a cor UNselected do item da barra de guias no storyboard?
Peter
1
Funciona perfeito para o meu caso - preciso que meus cinco itens da tabBar sejam de cores exclusivas quando selecionados. Consegui definir esse Atributo de Tempo de Execução no UITabBarItem, no UINavigationControllerconectado à minha tabBar e ele funciona perfeitamente. Tudo sem escrever nenhum código também, o que é ótimo, pois estou reutilizando uma classe de VC três vezes. Obrigado!
Rosshump
7
inversamente - esta é a única abordagem que funciona em iOS 10 (matiz do painel atributos parece não funcionar, e atributo de tempo de execução "tintColor" de uitabbaritem não funciona também.
luky
5
StackOverflow 1: Apple 0
Sharukh Mastan
175

Esta solução elegante funciona muito bem no SWIFT 3.0 , SWIFT 4.2 e SWIFT 5.1 :

No Storyboard:

  1. Selecione sua barra de guias
  2. Defina um Runtime Attibute chamado tintColor para a cor desejada do ícone Selected na barra de guias
  3. Defina um Runtime Attibute chamado unselectedItemTintColor para a cor desejada do ícone Não selecionado na barra de guias

insira a descrição da imagem aqui

Edit: Trabalhando com o Xcode 8/10, para iOS 10/12 e superior .

Marcelo Gracietti
fonte
6
Muito obrigado. unselectedItemTintColor encontra muito raro
Rushi trivedi
4
Solução perfeita 'unselectedItemTintColor' para mim, obrigado.
fozoglu
Isso funcionará se o destino da implantação for 8.0 ou 9.0? Eu tenho usado rápida 3.0 e Xcode 8.0 para o desenvolvimento
Mamta
2
Importante para selecionar a barra Tab, de fato funcionou no Swift 4 para mim.
Contras Bulaquena
2
Excelente! Ainda trabalhando em xCode 10 :) não atualizar o editor visual, mas funciona uma vez compilado :)
Mihail Minkov
64

No Swift, usando o xcode 7 (e posterior), você pode adicionar o seguinte ao seu arquivo AppDelegate.swift:

UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

É assim que o método completo se parece:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // I added this line
    UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

    return true
}

No exemplo acima, meu item será branco. O "/255.0" é necessário porque espera um valor de 0 a 1. Para o branco, eu poderia ter usado apenas 1. Mas para outras cores, você provavelmente estará usando valores RGB.

Jarrod
fonte
3
Parece que nenhum outro método funciona (mais nada.) Isso funciona!
Teddy
@ Jarrod Eu estava brincando com isso por quase 1 hora, esta resposta deveria ter mais votos. Obrigado!
Lance Samaria
53

Em Xcode8Eu mudei o ImageTintdo storyboard e funciona bem.

insira a descrição da imagem aqui

O resultado:

insira a descrição da imagem aqui

Francisco Romero
fonte
1
Ao usar imagens personalizadas Esta é a única que funcionou para mim
Juanjo
1
Essa deve ser a resposta aceita. Não requer um atributo de tempo de execução, o que significa que isso funciona nas telas Iniciar!
Chris Douglass
18

Swift 3 | Xcode 10

Se você deseja tornar todos os itens da barra de guias da mesma cor (marcados e desmarcados) ...


Passo 1

Verifique se os recursos da imagem estão configurados para Renderizar como = imagem do modelo . Isso permite que eles herdem cores.

Recursos do Xcode


Passo 2

Use o editor de storyboard para alterar as configurações da barra de guias da seguinte maneira:

  • Defina Barra de abas: Tonalidade da imagem com a cor que você deseja herdar do ícone selecionado.
  • Definir barra de guias : tonalidade da barra para a cor que você deseja que a barra de guias seja.
  • Definir visualização: tinja a cor que você deseja ver no editor de storyboard, isso não afeta a cor do ícone quando o aplicativo é executado.

Xcode Storyboard Editor


etapa 3

Os passos 1 e 2 mudam a cor do ícone selecionado. Se você ainda deseja alterar a cor dos itens não selecionados, é necessário fazê-lo no código. Não encontrei uma maneira de fazer isso através do editor de storyboard.

Crie uma classe de controlador de barra de guia personalizada ...

//  TabBarController.swift

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // make unselected icons white
        self.tabBar.unselectedItemTintColor = UIColor.white
    }
}

... e atribua a classe personalizada ao seu controlador de cena da barra de guias.

Xcode Storyboard Editor


Se você descobrir como alterar a cor do ícone não selecionado por meio do editor de storyboard, informe-me. Obrigado!

Derek Soike
fonte
self.tabBar.unselectedItemTintColor = UIColor.white self.tabBar.tintColor = #colorLiteral(red: 0.2, green: 0.7333333333, blue: 0.3450980392, alpha: 1) Trabalhe para mim
Wahab Khan Jadon
9

coloque esse código no viewDidLoad do controlador de exibição do qual você deseja alterar a cor de

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
usuario
fonte
1
Não há como mudar para todas as guias?
Deekor
Basta colocar o código com a mesma cor na visão fez carga de todos os separadores
Nick
você pode usar esse código logo após criar seu UITabController, ele definirá a cor mencionada para todos os itens de guia na seleção.
Jerrin
Não existe esse método setSelectedImageTintColor
Madhu Avinash
8

Você também pode definir a cor da tonalidade da barra de imagem selecionada pelo caminho da tecla:

insira a descrição da imagem aqui

Espero que isso ajude você !! obrigado

Arvind Kumar
fonte
no iOS 9 não muda a cor não selecionado
Saeed Rahmatolahi
Como isso ajudaria a mudar a cor do ícone do UITabBar?
Madhu Avinash
7

XCode 8.2, iOS 10, Swift 3: agora há um unselectedItemTintColoratributo para tabBar:

self.tabBar.unselectedItemTintColor = UIColor(red: 0/255.0, green: 200/255.0, blue: 0/255.0, alpha: 1.0)
ComboPrime
fonte
6

Você pode alterar as cores UITabBarItem por storyboard, mas se quiser alterar as cores por código, é muito fácil:

// Use isso para alterar a cor da barra selecionada

   [[UITabBar appearance] setTintColor:[UIColor blueColor]];

// Barra não selecionada para alteração (iOS 10)

   [[UITabBar appearance] setUnselectedItemTintColor:[UIColor yellowColor]];

// E esta linha para alterar a cor de todas as barras de tabulação

   [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
Genevios
fonte
setUnselectedItemTintColor é apenas para iOS 10
ondermerol 31/03
5

De alguma forma, não somos capazes de alterar a cor da tonalidade do item selecionado da barra de guias usando o storyboard sozinho; portanto, adicionei o código abaixo no meu ViewDidLoad, espero que ajude.

[[UITabBar appearance] setTintColor:[UIColor whiteColor]]; 
skypirate
fonte
5

Adicione este código à função delegar -did_finish_launching_with_options do aplicativo

UITabBar.appearance().tintColor = UIColor( red: CGFloat(255/255.0), green: CGFloat(99/255.0), blue: CGFloat(95/255.0), alpha: CGFloat(1.0) )

coloque o RGB da cor desejada

SHINTO JOSEPH
fonte
4

Esta é a solução no Swift 3 que funciona no iOS 10:

Primeiramente, você cria sua própria subclasse de controlador de barra de tabulação e a adiciona ao seu controlador de tabulação no storyboard. No viewDidLoad()método, você pode personalizar a barra de guias. Deve-se afirmar aqui que otintColor atributo do tabBarrepresenta a cor do item selecionado e não a cor dos itens não selecionados! Para alterar a cor dos itens não selecionados, recomendo percorrer cada item e usar as cores originais das suas imagens, para que elas não sejam renderizadas automaticamente em cinza.

class CustomTabBarVC: UITabBarController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        self.tabBar.tintColor = AppColor.normalRed
        self.tabBar.barTintColor = .white
        self.tabBar.isTranslucent = true

        if let items = self.tabBar.items
        {
            for item in items
            {
                if let image = item.image
                {
                    item.image = image.withRenderingMode( .alwaysOriginal )
                }
            }
        }
    }
}

A única desvantagem dessa abordagem é que as imagens dos itens já devem ter a cor desejada para a qual você deseja.

arauter
fonte
Complicado. A resposta de Jarrod funciona bem com todos os ícones.
Jose Ramirez
4

A melhor maneira é mudar Image Tintno storyboard

Jadian
fonte
2

Você pode subclassificar UITabBarControllere substituí-lo pelo storyboard. Na sua viewDidLoadimplementação da subclasse, chame isso:

[self.tabBar setTintColor:[UIColor greenColor]];
chancyWu
fonte
Obtendo:'UITabBar' does not have a member named 'setSelectedImageTintColor'
Deekor 10/11/2014
Também estou usando rápido então eu coloquei: self.tabBar.setSelectedImageTintColor = UIColor.greenColornão tenho certeza se isso é correto ou não
Deekor
2
@Deekor é tintColornão selectedImageTintColor, btw selectedImageTintColorestá obsoleta no iOS 8.
chancyWu