使用单个方法调用设置UIButton的标题?

Gre*_*tic 3 iphone uibutton

我想通过代码设置UIButton的标题.我发现自己不得不为UIControlStateNormal,UIControlStateHighlighted,UIControlStateDisabled,UIControlStateSelected调用 - [UIButton setTitle:forState:].而这甚至没有考虑到这些状态的所有组合.

不用说,这很烦人.我可以进行一次调用,将一个字符串设置为所有状态的标题吗?(因为,我认为在95%的情况下,这是理想的行为?)

Sha*_*rog 9

是的,你当然可以.来自文档:

通常,如果未为状态指定属性,则默认使用该UIControlStateNormal值.如果UIControlStateNormal 未设置值,则属性默认为系统值.因此,您至少应该设置正常状态的值.

所以只需设置标题UIControlStateNormal,你就是金色的.

  • 在实践中,我发现情况似乎并非如此:单击按钮时文本神秘地消失等等.这就是说,我不确定我是否可以重现这些情况.如果我发现问题,我会在这里发布.谢谢! (5认同)

Tom*_*Tom 7

像Mr.M先生一样.Frog说,设置UIControlStateNormal的标题通常会起作用.唯一的例外是如果已经为其他州设置了标题.UIControlState是一个掩码,所以你可以像这样覆盖你的屁股:

[button setTitle:@"Title" forState:UIControlStateNormal|UIControlStateHighlighted| UIControlStateDisabled|UIControlStateSelected]
Run Code Online (Sandbox Code Playgroud)

如果你想简明扼要:

#define kAllControlStates (UIControlStateNormal|UIControlStateHighlighted| UIControlStateDisabled|UIControlStateSelected)
[button setTitle:@"Title" forState:kAllControlStates];
Run Code Online (Sandbox Code Playgroud)

或简洁和不透明:

[button setTitle:@"Title" forState:0xffff];
Run Code Online (Sandbox Code Playgroud)

更新:我应该在回答之前对此进行测试.事实证明,掩码UIControlStateHighlighted|UIControlStateDisabled表示控件同时被突出显示禁用时的状态.我错误地认为该面具表示"高亮禁用".总而言之,你最好先了解Frog先生的答案.

  • 我发现这对我不起作用.文本没有显示在按钮上.我想知道是不是因为UIControlStateNormal等于0,这使得它在位掩码中相当无用? (4认同)