Как установить для заголовка UIButton значение NULL или пустую строку - PullRequest
5 голосов
/ 24 июня 2011

TL; DR - Мой вопрос на самом деле таков: как установить для заголовка UIButton пустую строку или значение NULL после того, как ему уже был присвоен предыдущий заголовок.

У меня есть UIButton, который принимает строку, сгенерированную на основе текста из переменной NSString, в качестве заголовка, используя следующее:

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

Ради этого вопроса, давайте просто предположим, что у меня установлена ​​переменная "HELLO" в моей переменной NSString. Это тогда заставляет мой 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 ]

6 голосов
/ 09 ноября 2011

Я тоже столкнулся с той же проблемой. Я устанавливал заголовок кнопки на @"" для всех состояний, и позже, когда я проверяю titlelabel.text, он дает мне предыдущий заголовок, который не @"". Поэтому я распечатал все возможные значения кнопки, как это было предложено PengOne, и обнаружил, что свойства titleForState и currentTitle дают обновленные / правильные значения.

Таким образом, вместо проверки titleLabel.text, попробуйте проверить currentTitle или titleForState.

Я до сих пор не понял, почему titleLabel не обновляется должным образом.

2 голосов
/ 24 июня 2011

Я считаю, что это связано с тем, как UIButton обновляет свое свойство titleLabel при вызове setTitle:forState:.

Например, если вы попытаетесь установить заголовок кнопки, напрямую обращаясь к свойству titleLabel.text, она не будет работать (см. Множество вопросов по SO).

Если вы действительно хотите понять, что происходит, то вам следует посмотреть и на titleLabel.text, и на текущее состояние кнопки. Один из способов сделать это - войти в систему titleLabel.text, currentTitle и titleForState: в viewWillAppear, viewDidAppear, viewWillDisappear и viewDidDisappear. Первые два (titleLabel.text, currentTitle,) должны совпадать, а третье должно соответствовать ожидаемому (titleForState:).

1 голос
/ 24 июня 2011

Это похоже на ошибку в SDK, создайте отчет об ошибке .

Если вам действительно нужна кнопка без заголовка, вам, вероятно, придется создать ее самостоятельно.UIView с установленным слоем имеет значение cornerRadius (и, следовательно, должно быть округлено), которое реагирует на взаимодействие с пользователем, должно это сделать.Кроме того, проверьте three20 инструментарий, там могут быть пользовательские кнопки или две, которые можно использовать для экономии времени.

0 голосов
/ 18 мая 2014

Я видел ту же проблему, но в другом контексте. Я использовал NSLocalizableString, чтобы изменить текст в кнопке.

Похоже, что установка UIButton.title меняет UIButton.currentTitle , но не UIButton.titleLabel.text .

Хотя это может не иметь большого значения для вашего приложения, тот факт, что titleLabel.txt и currentTitle - это разные повороты для того, чтобы быть скорее «осведомленным», чем задача реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...