我创建了send_file
的实例,并希望为UIButton
州,Normal
州和Selected
州设置标题颜色。而我这样做 -
Highlighted
使用上面的代码,当我构建并运行应用程序时,文本会按照预期显示为红色。
但是当我在一个语句中为所有状态设置按钮的标题颜色为 -
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState: UIControlStateSelected];
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
构建并运行应用程序......
问题
按钮上的文字显示为白色。
这是(上述陈述)不是设置[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal | UIControlStateSelected | UIControlStateHighlighted];
标题颜色的正确方法吗?我是否需要在三个不同的陈述中设置UIButton
的标题颜色?
欢迎任何建议/帮助!
非常感谢提前。
答案 0 :(得分:2)
只需将titleColor设置为正常状态
即可 [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
button.tintColor = [UIColor redColor];
答案 1 :(得分:2)
UIControlState定义为
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
};
写作时
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal | UIControlStateSelected | UIControlStateHighlighted];
这实际上意味着您正在为状态0x00000101设置红色。 Button永远不会处于此状态,因为它未定义。所以行为也是未定义的。
答案 2 :(得分:1)
您需要了解位掩码的工作原理。 Merlin指出了正确的方向,但他实际上没有给出解释。
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
};
UIControlStateNormal
是默认状态。它并没有真正使用位掩码。 UIControlStateHighlighted
中的UIControlStateDisabled
,UIControlStateSelected
,ENUM
个国家/地区正在使用位掩码,因此可以按照您在OP中的方式使用。
例如,请查看ENUM
的{{1}}:
UIUserNotificationType
typedef NS_OPTIONS(NSUInteger, UIUserNotificationType) {
UIUserNotificationTypeNone = 0, // the application may not present any UI upon a notification being received
UIUserNotificationTypeBadge = 1 << 0, // the application may badge its icon upon a notification being received
UIUserNotificationTypeSound = 1 << 1, // the application may play a sound upon a notification being received
UIUserNotificationTypeAlert = 1 << 2, // the application may display an alert upon a notification being received
} NS_ENUM_AVAILABLE_IOS(8_0);
不是一点掩饰。您不会同时注册声音,徽章和无类型的通知。没有,其他人必须是排他性的(各种异或)。
同样适用于UIUserNotificationTypeNone
。 UIControlState
不得与其他州一起使用。您可以以任意组合使用位掩码值,但如果您引入甚至一个非位掩码值,结果将是您不会期望的结果。对于您的具体情况,Merlin给出了将非位掩码值与其他位掩码一起使用的确切结果。
简而言之,如果您使用UIControlStateNormal
,请设置UIControlStateNormal
。否则,仅使用位掩码值。
答案 3 :(得分:0)
您也可以使用故事板进行这些操作。
从状态配置属性,您可以选择所需的任何状态,并相应地设置不同的属性。