UILabel как подпредставление UIBarButtonItem.customView не тускнеет при представлении контроллера представления

У меня есть проблема, когда UILabel на панели навигации не подкрашивается должным образом, когда контроллер представления представлен модально.

UILabel находится на панели навигации как дочерний вид UIButton, который является дочерним представлением UIBarButtonItem, который является rightBarButtonItem контроллера навигации; Посмотреть иерархию:

rightBarButtonItem
-UIBarButtonItem
--UIButton <- это UIButtonTypeSystem с изображением корзины. Тонирую правильно.
--- UILabel<- это количество товаров в корзине. Не тонируется.

Чтобы быть понятным, все работает отлично, кроме оттенка метки во время представленного модального. До того, как контроллер представления представлен, корзина окрашена в синий цвет, так же как и этикетка, содержащая количество товаров в корзине. Когда модальный представлен, изображение корзины тускнеет, но метка остается синим.

Я бы выложил изображения, но мне не хватает репутации, извините.

Что я пробовал:

  • Установка цвета оттенка на этикетке
  • Настройка label.userInteractionEnabled = NO
  • Настройка label.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed ко всем доступным значениям (ни одно из которых не помогло)
  • Создание подкласса UIButton и рисование элементов # корзины во время drawRect
  • Во время презентации контроллера представления найдите метку в navigationItem.rightBarButtonItem.customView иерархия и установка tintAdjustmentMode вручную.

Ничего не сработало. У меня нет идей...

Вот код, где я создаю UIBarButtonItem:

+(UIBarButtonItem*) getCartBarButtonItemWithDelegate:(id)delegate {

    NSInteger cartItems = [[DataHandler sharedInstance]cartQuantity];

    NSString* num = [NSString stringWithFormat:@"%lu", (unsigned long) cartItems];
    NSString* cartImageToUse = @"cart_toolbar_button_icon";
    CGFloat fontSize = 11;
    UILabel *label = nil;

    if(cartItems  > 0) {
        if([num length] > 1) {
            cartImageToUse = @"cartnumbered_toolbar_button2_icon";
            fontSize = 10;
            label = [[UILabel alloc]initWithFrame:CGRectMake(7, -3, 16, 12)];
        } else {
            cartImageToUse = @"cartnumbered_toolbar_button_icon";
            label = [[UILabel alloc]initWithFrame:CGRectMake(7.5, -3, 16, 12)];
        }        

        [label setFont:[UIFont systemFontOfSize:fontSize]];
        [label setText: num ];
        [label setTextAlignment:NSTextAlignmentCenter];
        [label setBackgroundColor:[UIColor clearColor]];
    }

    // attempt at sub classing UIButton and drawing the number of items in the drawRect method
    //CartButton *button =  [CartButton buttonWithType:UIButtonTypeSystem];
    UIButton *button =  [UIButton buttonWithType:UIButtonTypeSystem];
    [button setImage:[UIImage imageNamed: cartImageToUse] forState:UIControlStateNormal];
    [button addTarget:delegate action:@selector(handleCartTouch:)forControlEvents:UIControlEventTouchUpInside];
    [button setFrame:CGRectMake(0, 0, 25, 21)];

    if(label != nil) {
        [label setTextColor: button.tintColor];                    
        [button addSubview:label];
    }

    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    [label release];
    return newBackButton;
}

Есть идеи?

1 ответ

Решение

Лучшее решение, которое я мог придумать, было отключить метку, когда будет представлен модальный контроллер вида. Когда модал уволен, я заменяю пункт меню панели инструментов (вызывая getCartBarButtonItemWithDelegate) снова, со свежим, активным ярлыком.

Таким образом, мне не нужно было пытаться подобрать цвет, который должен быть. Кроме того, это должно гарантировать, что будущие версии iOS будут соответствующим образом окрашивать ссылку, если цвета ссылки (и отключенной ссылки) когда-либо изменятся.

Другие вопросы по тегам