如何将UIButton标题设置为null或空字符串

时间:2011-06-23 22:22:01

标签: iphone objective-c uibutton

TL; DR - 我的问题是:如何将UIButton的标题设置为空字符串,或者在为其分配了之前的标题后为null。

我有一个UIButton,它使用以下内容接受基于NSString变量中文本生成的字符串作为标题:

NSString *MyStringVariable = @"HELLO";
...
[myButton setTitle:MyStringVariable forState:UIControlStateNormal];

为了这个问题,让我们假设我在我的NSString变量上设置了“HELLO”。这使我的UIButton标题为“HELLO”,显然......

然后我有另一个按钮从UI按钮中删除这个标题,如下所示:

[myButton setTitle:@"" forState:UIControlStateNormal];

哪个 隐藏UIButton的标题(即它现在看起来像一个空的UIButton),但经过进一步检查,标题确实仍然存在。如果我将以下内容添加到我的UIViewController:

- (void)viewWillAppear:(BOOL)animated{
    NSLog(@"Title: %@", myButton.titleLabel.text);
}

并在此视图中往返导航,即使我已将文本设置为@“”,标题仍会继续记录在控制台中。

我尝试了以下方法让标题真正消失:

[myButton setTitle:@"" forState:UIControlStateNormal];
[myButton setTitle:NULL forState:UIControlStateNormal];
[myButton setTitle:nil forState:UIControlStateNormal];
myButton.titleLabel.text = @"";

奇怪的是,如果我将标题设置为@“”(带空格):

[myButton setTitle:@" " forState:UIControlStateNormal];

标题确实正确更新,然后将空间记录到控制台,而不是旧标题。

我的问题是:如何将UIButton的标题设置为空字符串,或者在为其分配了以前的标题后为null。

4 个答案:

答案 0 :(得分:6)

我也遇到了同样的问题。我将所有州的按钮标题设置为@"",稍后当我检查titlelabel.text时,它会向我提供之前不是@""的标题。因此,我按照PengOne的建议打印出按钮的所有可能值,并发现属性titleForStatecurrentTitle提供更新/正确的值。

因此,请检查titleLabel.textcurrentTitle,而不是检查titleForState

我仍然没有弄清楚为什么titleLabel没有正确更新。

答案 1 :(得分:2)

我认为这与UIButton在调用titleLabel时更新其setTitle:forState:属性的方式有关。

例如,如果您尝试通过直接访问titleLabel.text属性来设置按钮的标题,则它不起作用(请查看有关此问题的无数问题)。

如果您真的想了解正在发生的事情,那么您应该同时查看titleLabel.text和按钮的当前状态。一种方法是在titleLabel.textcurrentTitletitleForState:和{{1}中记录viewWillAppearviewDidAppearviewWillDisappear }。前两个(viewDidDisappeartitleLabel.text,)应该重合,第三个应该是您期望的(currentTitle)。

答案 2 :(得分:1)

这听起来像SDK中的一个错误,创建一个bugreport

如果你真的需要一个没有标题的按钮,你可能需要自己创建一个。一个UIView,它的图层设置为有一个cornerRadius(因此被舍入),它响应用户交互应该这样做。另外,检查three20工具包,他们可能有一两个自定义按钮,您可以使用它来节省一些时间。

答案 3 :(得分:0)

我在不同的背景下看过同样的问题。我一直在使用NSLocalizableString来更改按钮中的文本。

似乎设置 UIButton.title 会更改其 UIButton.currentTitle ,而不会更改其 UIButton.titleLabel.text

虽然它可能对您的应用程序没有多大影响,但 titleLabel.txt currentTitle 不同的事实变成了更多的"要知道"而不是实施挑战。