UIButton setTitle:forState:问题

bio*_*ffe 14 iphone cocoa-touch objective-c uikit

为什么以下代码有效:

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)

虽然这不是:

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted|UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)

Pat*_*dez 29

我知道这是一个老问题,但这些答案都不正确.

当你单独设置每个state属性时,你说的属性应该是UIControlStateHighlightedOR UIControlStateDisabled而不是两者

当你按位或他们在一起时,你说他们必须同时设置在state属性中.含义 UIControlStateHighlightedAND UIControlStateDisabledstate属性中设置.

下面的示例代码完美地说明了我的观点.如果你不同意自己运行它.

[button setTitle:@"highlighted and selected" forState:UIControlStateHighlighted | UIControlStateSelected];
[button setTitle:@"Highlighted only" forState:UIControlStateHighlighted];
[button setTitle:@"Selected only" forState:UIControlStateSelected];
[button setTitle:@"Normal" forState:UIControlStateNormal];

NSLog(@"Normal title: %@", [[button titleLabel] text]); // prints title: Normal

[button setSelected:YES];

NSLog(@"Selected title: %@", [[button titleLabel] text]); // prints title: Selected only 

[button setSelected:NO];
[button setHighlighted:YES];

NSLog(@"highlighted title: %@", [[button titleLabel] text]); // prints title: Highlighted only

[button setSelected:YES];

NSLog(@"highlighted and selected title: %@", [[button titleLabel] text]); // prints title: highlighted and selected
Run Code Online (Sandbox Code Playgroud)

  • @bioffer:你错了,帕特里克是对的.每次调用`setTitle:forState:`时,它都会在按钮内设置一个额外的标题,并将其分配给该特定的蒙版组合.当掩码组合不存在时,它将回退到UIControlStateNormal掩码的标题集.例如,如果你在Patrick的例子中注释第一行,那么最后一个`NSLog()`将打印`"突出显示并选择标题:normal"`.这是因为您没有为突出显示和选择按钮时设置标题. (4认同)