Los iconos muestran bien en ios 6, pero no en ios 7. Estoy configurando el estado seleccionado en el viewController método viewDidLoad. Cuando el usuario selecciona una ficha elemento de la barra de la imagen desaparece.
Aquí está mi código:

UITabBar *tabBar = self.tabBarController.tabBar;
if ([UITabBar instancesRespondToSelector:@selector(setSelectedImageTintColor:)]) {
    [self.tabBarController.tabBar setSelectedImageTintColor:[UIColor whiteColor]];
}
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
UITabBarItem *item3 = [tabBar.items objectAtIndex:3];
[item0 setTitle:@"Home"];
[item1 setTitle:@"Calendar"];
[item2 setTitle:@"News"];
[item3 setTitle:@"My Events"];
[item0 setFinishedSelectedImage:[UIImage imageNamed:@"homeIconSelected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"home2.png"]];
[item1 setFinishedSelectedImage:[UIImage imageNamed:@"Calendar"] withFinishedUnselectedImage:[UIImage imageNamed:@"CalendarIconSelected"]];
[item2 setFinishedSelectedImage:[UIImage imageNamed:@"NewsIconSelected"] withFinishedUnselectedImage:[UIImage imageNamed:@"News"]];
[item3 setFinishedSelectedImage:[UIImage imageNamed:@"EventsIconSelected"] withFinishedUnselectedImage:[UIImage imageNamed:@"Events"]];
[item1 imageInsets];
[item2 imageInsets];
[item3 imageInsets];
InformationsquelleAutor user1898829 | 2013-09-19

20 Comentarios

  1. 95

    Necesita utilizar tabBarItem initWithTitle:image:selectedImage

    [[UITabBarItem alloc] initWithTitle:@"title" image:image selectedImage:imageSel];

    junto con el cambio de la UIImage el modo de representación:

    imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal

    o (para aplicar padre vistas a la plantilla de tinte de la máscara, esta es la opción predeterminada para la Ficha Elementos de la barra a menos que usted opte a cabo con el anterior modo de representación)

    imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate

    aquí es un ejemplo de código para una sola ficha elemento de la barra :-

    UIImage *musicImage = [UIImage imageNamed:@"music.png"];
    UIImage *musicImageSel = [UIImage imageNamed:@"musicSel.png"];
    
    musicImage = [musicImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    musicImageSel = [musicImageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    self.musicViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Music" image:musicImage selectedImage:musicImageSel];

    Espero que esto ayude

    • no funciona para mí 🙁
    • Necesito un poco más de info, donde se le llama de de Appdelegate, viewController o UITabbar/Controlador de la Subclase o categoría
    • no trabajo para mí también .. 🙁
    • Es necesario explicar qué quiere decir con «no funciona»…
    • Esto sólo funciona para una de las imágenes. El uso de este código exacto no seleccionados los elementos de ficha ver como el icono que me ponga. El seleccionado, aunque es sólo un círculo azul.
    • gracias, compañero. código iban bien.
    • Actualmente estoy experimentando el mismo problema, pero sólo cuando se ejecuta un no-retina dispositivo con iOS 7 instalado.
    • En iOS 7.1, esta solución no es necesario. Me pregunto si esto es un bug o no?
    • Gran Ayuda… Gracias
    • A mí me funciona. iOS 8.1, Xcode 6.4. Gracias
    • no trabajo para mí..
    • Por favor, tenga en cuenta que In conjunction with changing the UIImage rendering mode: imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal es un muy importante detalle. Si la imagen está configurado como una plantilla, el color predeterminado del sistema aparecerá. Así que en lugar de item.selectedImage = someImage;, intente item.selectedImage = [someImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; y ver si funciona.

  2. 53

    Conjunto de elemento de la barra de imagen del modo de procesamiento de la original puede resolver este problema.
    Esto se puede hacer mediante el uso de imágenes en el .xcassets, así que usted no tiene que escribir un montón de códigos.

    Primer paso, drap&caída de su elemento de la barra de imágenes de Activos.xcassets.

    Segundo paso, elija el elemento de la barra de imagen, y el cambio [de Render Como] a [Imagen Original]

    UITabBar no se muestra el elemento seleccionado imágenes en ios 7

    ps: por lo general establecer la TabBarController la pestaña de la barra de elementos, todos ellos por la historia de la junta para evitar tener que escribir un montón de código.

    UITabBar no se muestra el elemento seleccionado imágenes en ios 7

    • Limpiador de manera de arreglar la ficha de la barra de problema de imagen. Gracias
    • Gracias Xiao Jia!
    • Gracias 🙂 funciona como un encanto
    • Whoa!! Gracias mucho
    • La respuesta debe aceptar porque no hay necesidad de hacer el código para mostrar la imagen original del Guión gráfico. gran hombre keep it up
  3. 45

    Añadir estas líneas de códigos en

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UITabBar *tabBar = tabBarController.tabBar;
    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
    UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
    UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
    tabBarItem1.selectedImage = [[UIImage imageNamed:@"selectimg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem1.image = [[UIImage imageNamed:@"deselectimg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem1.title = @"xxxx";
    tabBarItem2.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem2.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem2.title = @"xxxx";
    tabBarItem3.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem3.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem3.title = @"xxxx";
    tabBarItem4.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem4.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem4.title = @"xxxx";
    return YES;
    }

    esto funciona para mí… y esperar lo mejor…

    • Esto funciona bien para iOS7, sólo una INTENSA que el método [UIImage imageWithRenderingMode] no está disponible en los anteriores Sdk.
    • No trabajo para mí en iOS7. Ni la imagen de fondo ni tabbar del elemento imágenes están mostrando.
    • Gracias! esta cosa me dio un dolor de cabeza para 2 horas..la documentación dijo a utilizar el método de initWithTitle:imagen:selectedImage:…pero que no estaba trabajando para mí en absoluto! Su forma de grandes obras
    • bienvenido @JoshEngelsma..!! 🙂
    • Funciona bien en iOS 8+ también.
  4. 16

    Las respuestas No ayudó a solucionar este problema. La razón principal es que mi TabBarController no era mi RootViewController.

    La solución que se usa para los Storyboards, y me acaba de hacer clic en mi UITabButton y he añadido un tiempo de ejecución de atributo para selectedImage:

    UITabBar no se muestra el elemento seleccionado imágenes en ios 7

    Para cada uno de los diferentes puntos de vista asociados con la UITabController.

    • Muchas gracias por esta respuesta!
  5. 9

    Después de pasar un par de horas tratando de hacer mi costumbre tabbar a trabajar tanto para iOS 6 & 7, que es lo que funcionó para mí…

    UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController];
    UITabBar *tabBar = tabBarController.tabBar;
    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
    UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
    UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
    tabBarItem1.title = @"Home";
    tabBarItem2.title = @"Map";
    tabBarItem3.title = @"Weather";
    tabBarItem4.title = @"Info";
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
    [tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_home_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_home_black.png"]];
    [tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_cloud_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_cloud_black.png"]];
    [tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_map_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_map_black.png"]];
    [tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_info_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_info_black.png"]];
    } else {
    tabBarItem1.selectedImage = [[UIImage imageNamed:@"cyexplore_home_white"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem1.image = [[UIImage imageNamed:@"cyexplore_home_black"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem2.selectedImage = [[UIImage imageNamed:@"cyexplore_cloud_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem2.image = [[UIImage imageNamed:@"cyexplore_cloud_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem3.selectedImage = [[UIImage imageNamed:@"cyexplore_map_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem3.image = [[UIImage imageNamed:@"cyexplore_map_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem4.selectedImage = [[UIImage imageNamed:@"cyexplore_info_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    tabBarItem4.image = [[UIImage imageNamed:@"cyexplore_info_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    }
    UIImage* tabBarBackground = [UIImage imageNamed:@"tabbar.png"];
    [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_selected.png"]];
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor, nil] forState:UIControlStateSelected];
  6. 8

    si usted está trabajando con los storyboards tienes que poner el identificador de : «personalizado» en la Navegación de la Controladora.

    a continuación :

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    //Assign tab bar item with titles
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UITabBar *tabBar = tabBarController.tabBar;
    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
    UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
    (void)[tabBarItem1 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
    (void)[tabBarItem2 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
    (void)[tabBarItem3 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
    //Change the tab bar background
    UIImage* tabBarBackground = [UIImage imageNamed:@"tabbar.png"];
    [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    return YES;
    }

    Esto funciona para mí.

    • Muchas gracias. Yo no tenía «a la medida» en NavigationController.
  7. 3

    Ninguna de las respuestas que funcionó para mí – estoy utilizando MonoTouch, pero si establece el TintColor propiedad de la UITabBar sí que se resalte la imagen seleccionada con ese color. En obj c puede ser setTintColor función.

    • Gracias, jharr100, esto resuelve el problema para mí. 🙂 Me gustaría poder upvote dos veces!
  8. 3

    Tuve el mismo problema con Xcode 6.0.1 (6A317), que parece ser un error con el Interface builder.
    Sin embargo, he conseguido resolverlo dejando selected image vacío en el interface builder, a continuación, en cada viewDidLoad en mi opinión controladores hice insertar:

    [self.navigationController.tabBarItem setSelectedImage:[UIImage imageNamed:@"imagename-selected"]];

    funciona bien ahora, mostrando mi selectedImage y con global de tinte máscara.

  9. 2

    Basado en la respuesta de 132206, he hecho este método para AppDelegate, llamado de application:didFinishLaunchingWithOptions: con:

    [self configureSelectedImages];

    Esto, obviamente, requiere de un estricto convención de nomenclatura para su pestaña de imágenes, pero también puede ser re-utilizado sin editar. Para decir lo obvio – nombre de la ficha seleccionada de la barra de imágenes TabbarXXXSelected, donde XXX es igual a la del título de la ficha elemento de la barra.

    - (void)configureSelectedImages
    {
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UITabBar *tabBar = tabBarController.tabBar;
    for (UITabBarItem *tabBarItem in [tabBar items]) {
    NSString *selectedImage = [NSString stringWithFormat:@"Tabbar%@Selected", [tabBarItem title]];
    (void)[tabBarItem initWithTitle:[tabBarItem title] image:[tabBarItem image] selectedImage:[UIImage imageNamed:selectedImage]];
    }
    }
  10. 2

    Usted debe escribir a la función:

    UIImage* tab_image = [UIImage imageNamed:@"tab_image.png"];
    UIImage* tab_image_selected = [UIImage imageNamed:@"tab_image_selected.png"];
    tab_image = [tab_image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    tab_image_selected = [tab_image_selected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBarItem.image = tab_image;
    self.tabBarItem.selectedImage = tab_image_selected;

    Espero que esto ayude a

    • Sólo en caso de que usted no sabe, usted puede usar rebajas para el formato de los fragmentos de código en el cuerpo del post. Esto ayuda a hacer su pregunta/respuesta más concisa y legible. Además, asegúrese de que está utilizando el cartel original de la pregunta.
  11. 2

    En su primer punto de vista del controlador .h archivo, he añadido el siguiente:
    @property (débil, nonatomic) IBOutlet UITabBarItem *mapViewTabBarItem;
    @property (débil, nonatomic) IBOutlet UITabBarItem *profileViewTabBarItem;
    @property (débil, nonatomic) IBOutlet UITabBarItem *notificationViewTabBarItem;

    (tenga en cuenta que el mapViewTabBarItem estaba ligada por ctrl arrastrando la real ficha elemento de la barra en la lista de las declaraciones de propiedad en la parte superior de la .h archivo)

    Siguiente, en el mismo punto de vista del controlador .m archivo en el viewDidLoad, agregue el siguiente:

    self.tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
    _mapViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-map-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    self.tabBarItem.image = [[UIImage imageNamed:@"@2x-map-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _profileViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:1];
    _profileViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-profile-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _profileViewTabBarItem.image = [[UIImage imageNamed:@"@2x-profile-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _notificationViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:2];
    _notificationViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-notifications-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _notificationViewTabBarItem.image = [[UIImage imageNamed:@"@2x-notifications-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
  12. 2

    He tenido un problema similar. He creado la barra de pestañas en el guión y el agregado de todas las imágenes a través de la interfaz del generador de menús, ninguno en el código.

    Mi revisión fue realmente simple: en virtud de los atributos de la ventana del inspector en IB, la Ficha Elemento de la Barra de campo para la «Imagen Seleccionada» debe estar en blanco, y el Elemento de la Barra de campo para la «Imagen» debe ser llenado con la imagen que usted desea.

    Estoy corriendo Xcode 6.0.1 y pruebas con iOS 8.0.2 dispositivos.

  13. 1

    Intente esto:

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-Small-50.png"] tag:100];
    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"image-50.png"] tag:200];
    UITabBarItem *item3 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-clip-50.png"] tag:300];
    UITabBarItem *item4 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-color-50.png"] tag:400];
    UITabBarItem *item5 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-lock-50.png"] tag:500];
    [item1 setSelectedImage:[[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item1 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [item2 setSelectedImage:[[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item2 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [item3 setSelectedImage:[[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item3 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [item4 setSelectedImage:[[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item4 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [item5 setSelectedImage:[[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item5 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    item1.image = [[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item2.image = [[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item3.image = [[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item4.image = [[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item5.image = [[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    • Por favor podría elaborar más su respuesta añadiendo un poco más de descripción acerca de la solución que usted proporciona?
  14. 0

    He tenido el mismo problema. Pero el trabajo con los StoryBoards me impedía cambiar nada en el código. Dejando la imagen vacía en el guión gráfico eliminado este obstáculo para mí. Sin embargo, poner el initWithTitle en el viewWillAppear método de la ficha del viewcontroller me dio el extraño comportamiento. En primer lugar llegar a la imagen seleccionada se requiere un adicional y haga clic en las imágenes no se muestran, para los que no inicial de fichas.

    Para mí la fijación de este fue añadiendo el siguiente código en el AppDelegate en el DidFinishLoadingWithOptions (similar a 132206 y Amitabha):

    NSArray * vcs = [(UITabBarController*)self.window.rootViewController viewControllers];
    UIViewController *tab0 = [[(UINavigationController*)[vcs objectAtIndex:0] viewControllers] objectAtIndex:0];
    tab0.title = NSLocalizedString(@"Time", nil);
    tab0.tabBarItem =  [[UITabBarItem alloc] initWithTitle:tab0.title image:[UIImage imageNamed:@"Recents.png"] selectedImage:[UIImage imageNamed:@"RecentsSolid.png"]];
    UIViewController *tab1 = [[(UINavigationController*)[vcs objectAtIndex:1] viewControllers] objectAtIndex:0];
    tab1.title = NSLocalizedString(@"Expense", nil);
    tab1.tabBarItem = [[UITabBarItem alloc] initWithTitle:tab1.title image:[UIImage imageNamed:@"Euro.png"] selectedImage:[UIImage imageNamed:@"EuroSolid.png"]];
  15. 0

    Utilizar el código siguiente para solucionar el problema de imagen en iOS7:

    [[UITabBarItem alloc] initWithTitle:@"title" image:[[UIImage imageNamed:@"YOUR_IMAGE.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"YOUR_SEL_IMAGE.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
  16. 0

    Es fácil y limpio de la solución de la categoría de UITabBar Elementos.

    Acaba de crear la categoría y utilizar el tiempo de ejecución de Atributo y remitirla a partir de la categoría, como el de abajo.
    UITabBar no se muestra el elemento seleccionado imágenes en ios 7
    UITabBar no se muestra el elemento seleccionado imágenes en ios 7

    #import "UITabBarItem+CustomTabBar.h"
    @implementation UITabBarItem (CustomTabBar)
    -(void)setValue:(id)value forKey:(NSString *)key {
    if([key isEqualToString:@"tabtitle"]){
    if([value isEqualToString:@"contacts"]) {
    [self setSelectedImage:[[UIImage imageNamed:@"contacts-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    } else if([value isEqualToString:@"chat"]) {
    [self setSelectedImage:[[UIImage imageNamed:@"chat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    } else if([value isEqualToString:@"groupchat"]) {
    [self setSelectedImage:[[UIImage imageNamed:@"groupchat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    } else if([value isEqualToString:@"settings"]) {
    [self setSelectedImage:[[UIImage imageNamed:@"settings-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    }
    }
    [self setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Roboto-Regular" size:12.0f], NSFontAttributeName, [UIColor grayColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
    }
    @end
  17. 0

    Viejas preguntas, pero vamos a añadir mi solución aquí para Xamarin.iOS/C# y aquellos que quieren poner las imágenes a través del Interface builder. Me puse el Selected Image y Image atributos a través de la Interface Builder. A continuación, en el código he definido un InitTabs() método como este:

    public void InitTabs(){
    HomeTab.SelectedImage = HomeTab.SelectedImage.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
    HomeTab.Image = HomeTab.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
    }

    Llamada InitTabs() en ViewDidLoad y ahora la imagen correcta aparecerá tanto para los seleccionados y no seleccionados del estado.

  18. 0

    Aquí es una solución rápida para Swift-Chicos 🙂

    class CustomTabBar: UITabBar {
    required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    let btnNames = ["Title1", "Title2", "Title3", "Title4"]
    for (item, name) in zip(items!, btnNames) {
    item.image = UIImage(named: "bar\(name)Btn")?.imageWithRenderingMode(.AlwaysOriginal)
    item.selectedImage = UIImage(named: "bar\(name)SelectedBtn")?.imageWithRenderingMode(.AlwaysOriginal)
    item.title = name
    item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: .Normal)
    item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState: .Selected)
    }
    }
    }

    Lo que está pasando exactamente aquí:

    • Hacen matriz de btn títulos y considerar los nombres de archivo de imagen para que coincida con ellos
    • Hacer un bucle en la ficha elementos de la barra y acaba de crear btn títulos de la matriz de
    • Conjunto barButtonItem de la imagen y su selectedImage de la matriz
    • Configurar el texto del título de la matriz
    • Establece el título el color de texto para los estados .Y Normal .Seleccionado

    La configuración de colores de texto de la parte es importante si usted no desea mantener el elemento de título de color gris para .Normal y el azul para los .Seleccionado, como aparece por defecto. Esto a menudo es real cuando se considere imágenes personalizadas para la ficha elementos de la barra.

    • Por favor explique lo que su código.
    • Editado. La esperanza ahora es claro.
  19. 0

    Swift versión de muestra seleccionadas y no seleccionadas las imágenes y el título con UIAppearance API
    En el Appdelegate.m copia de código siguiente se si tiene ficha de la base de la aplicación.código siguiente se supone que usted tiene 4 barra de pestañas.

    let tabBarController: UITabBarController = (self.window!.rootViewController as! UITabBarController)
    let tabBar:UITabBar = tabBarController.tabBar
    let tabBarItem1:UITabBarItem = tabBar.items![0]
    let tabBarItem2:UITabBarItem = tabBar.items![1]
    let tabBarItem3:UITabBarItem = tabBar.items![2]
    let tabBarItem4:UITabBarItem = tabBar.items![3]
    tabBarItem1.title = "Home";
    tabBarItem2.title = "Maps";
    tabBarItem3.title = "My Plan";
    tabBarItem4.title = "Settings";
    tabBarItem1.selectedImage = UIImage(named: "home_selected.png")!
    tabBarItem2.selectedImage = UIImage(named: "maps_selected.png")!
    tabBarItem3.selectedImage = UIImage(named: "myplan_selected.png")!
    tabBarItem4.selectedImage = UIImage(named: "settings_selected.png")!
    tabBarItem1.image =  UIImage(named: "home.png")!
    tabBarItem2.image =  UIImage(named: "maps.png")!
    tabBarItem3.image =  UIImage(named: "myplan.png")!
    tabBarItem4.image =  UIImage(named: "settings.png")!
    let tabBarBackground: UIImage = UIImage(named: "tabbar.png")!
    UITabBar.appearance().backgroundImage = tabBarBackground
    UITabBar.appearance().selectionIndicatorImage = UIImage(named: "tabbar_selected.png")!
    UITabBarItem.appearance().setTitleTextAttributes([
    NSForegroundColorAttributeName : UIColor.whiteColor()
    ]
    , forState: .Normal)
    let titleHighlightedColor: UIColor = UIColor(red: 153 / 255.0, green: 192 / 255.0, blue: 48 / 255.0, alpha: 1.0)
    UITabBarItem.appearance().setTitleTextAttributes([
    NSForegroundColorAttributeName : titleHighlightedColor
    ]
    , forState: .Highlighted)
  20. 0

    Después de probar todas las respuestas y luchando como que no, he encontrado la respuesta. Las otras respuestas, , no parecen funcionar en swift actual versión. En Swift 2.3, esto funciona para mí. Para aquellos que todavía están teniendo problemas, pruebe esto:

    tabBarItem.image = UIImage(named: "image_name")
    searchVC.tabBarItem.selectedImage = UIImage(named:
    "image_name_when_selected")?.imageWithRenderingMode(.AlwaysOriginal)

Dejar respuesta

Please enter your comment!
Please enter your name here