UILabel 作为 UIBarButtonItem.customView 的子视图在呈现视图控制器时不会变暗
UILabel as subview of UIBarButtonItem.customView not dimming when presenting view controller
我遇到一个问题,当以模态方式呈现视图控制器时,导航栏中的 UILabel 没有正确着色。
UILabel在导航栏中,作为UIButton的子视图,UIButton是UIBarButtonItem的子视图,UIBarButtonItem是导航控制器的rightBarButtonItem;查看层次结构:
右栏按钮项
-UIBarButtonItem
--UIButton <-- 这是 UIButtonTypeSystem,带有购物车图像。正确着色。
---UILabel <-- 这是购物车中的商品数量。不着色。
需要说明的是,除了呈现模态期间的标签色调外,一切正常。在显示视图控制器之前,购物车被染成蓝色,包含购物车商品数量的标签也是如此。呈现模态时,购物车图像变暗,但标签保持蓝色。
我想要 post 张图片,但我没有足够的声誉,抱歉。
我尝试过的:
- 设置标签的色调
- 设置
label.userInteractionEnabled = NO
- 将
label.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed
设置为所有可用值(none 其中有帮助)
- 子类化 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;
}
有什么想法吗?
我能想到的最佳解决方案是在显示模态视图控制器时禁用标签。当模式消失时,我再次用一个新的、启用的标签替换了工具栏菜单项(通过调用 getCartBarButtonItemWithDelegate
)。
这样我就不必尝试匹配应该的颜色。此外,应该 确保 iOS 的未来版本能够适当地为 link 着色,如果 link(和禁用的 link)颜色永远改变。
我遇到一个问题,当以模态方式呈现视图控制器时,导航栏中的 UILabel 没有正确着色。
UILabel在导航栏中,作为UIButton的子视图,UIButton是UIBarButtonItem的子视图,UIBarButtonItem是导航控制器的rightBarButtonItem;查看层次结构:
右栏按钮项 -UIBarButtonItem --UIButton <-- 这是 UIButtonTypeSystem,带有购物车图像。正确着色。 ---UILabel <-- 这是购物车中的商品数量。不着色。
需要说明的是,除了呈现模态期间的标签色调外,一切正常。在显示视图控制器之前,购物车被染成蓝色,包含购物车商品数量的标签也是如此。呈现模态时,购物车图像变暗,但标签保持蓝色。
我想要 post 张图片,但我没有足够的声誉,抱歉。
我尝试过的:
- 设置标签的色调
- 设置
label.userInteractionEnabled = NO
- 将
label.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed
设置为所有可用值(none 其中有帮助) - 子类化 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;
}
有什么想法吗?
我能想到的最佳解决方案是在显示模态视图控制器时禁用标签。当模式消失时,我再次用一个新的、启用的标签替换了工具栏菜单项(通过调用 getCartBarButtonItemWithDelegate
)。
这样我就不必尝试匹配应该的颜色。此外,应该 确保 iOS 的未来版本能够适当地为 link 着色,如果 link(和禁用的 link)颜色永远改变。