1

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

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

 
rightBarButtonItem 
-UIBarButtonItem 
--UIButton <-- this is UIButtonTypeSystem, with a cart image. Tinting properly. 
---UILabel <-- this is the # of items in the cart. Not tinting. 

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

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

То, что я пробовал:

  • Установка оттенок цвета на этикетке
  • не Установка 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; 
} 

Любые идеи?

+0

Вы пытались изменить 'textColor' напрямую? – dopcn

ответ

0

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

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

Смежные вопросы