Подтвердить что ты не робот

Название UIButton изменяется на значение по умолчанию

Я чувствую, что это, наверное, глупый вопрос... но в любом случае у меня такое странное поведение UIButton.

Кнопка настроена и подключена как к действию, так и к свойству в IB (действие startButtonPushed и свойство startButton). Внутри контроллера представления у меня есть действие, настроенное следующим образом:

bool buttonStateStop;

- (IBAction)startPushed:(id)sender 
{
    if (buttonStateStop) 
    {
        [appD.locationManager stopSavingLocations];
        startButton.titleLabel.text = @"Start";
        buttonStateStop = NO;
    }
    else 
    {
        [appD.locationManager startSavingLocations];
        startButton.titleLabel.text = @"Stop";
        buttonStateStop = YES;        
    }
}

Изначально у меня был титул по умолчанию в IB, установленный на "Старт", но всякий раз, когда я нажимал кнопку, он менялся бы на "Стоп" на долю секунды, а затем обратно. Я потратил некоторое время, пытаясь понять, почему название продолжало возвращаться к "Старт". В конце концов я изменил название IB на "xxxxxx" и понял, что независимо от того, название IB становится подтвержденным сразу же после изменения названия кнопки.

Итак, вопрос:, почему IB продолжает менять название кнопки до значения по умолчанию? Раньше я никогда не сталкивался с этим поведением. И (очевидно), как я могу это исправить?

Дополнительная информация: единственными ссылками на кнопку являются @property, @synthesize и операторы в коде выше. Вид находится внутри навигационного контроллера.

4b9b3361

Ответ 1

Вам нужно использовать метод setTitle:forState: вместо установки свойства titleLabel.text:

[startButton setTitle:@"Start" forState:UIControlStateNormal];
// Normal and highlighted titles do not need to be the same
[startButton setTitle:@"Start!" forState:UIControlStateHighlighted];

Теперь происходит то, что вы устанавливаете заголовок в метке, представляющей представление текущего состояния, но как только состояние изменяется с обычного значения, кнопка сбрасывает метку обратно в заголовок для нового состояния (которое текст, который вы установили в IB).

Ответ 2

Быстрая версия

startButton.setTitle("Start", forState: UIControlState.Normal)