Когда я вызываю setTitle в UIButton, кнопка мигает в iOS 7. Я попытался установить myButton.highlighted = NO, но это не остановило мигание кнопки.
[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];
myButton.highlighted = NO;
Вот как я установил таймер, обновляющий заголовки:
- (void)actionTimer {
if (myTimer == nil) {
myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(showActivity)
userInfo: nil
repeats: YES];
}
}
Вот метод, который фактически обновляет заголовки:
- (void)showActivity {
NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];
if (pauseInterval == nil) {
// Update clock
seconds = [[NSDate date] timeIntervalSinceDate:startInterval] - breakTime;
// Update total earned
secRate = rate.value / 60 / 60;
total = secRate * seconds;
[totalLabel setTitle:[NSString stringWithFormat:@"%@%.4f",sym,total] forState:UIControlStateNormal];
days = seconds / (60 * 60 * 24);
seconds -= days * (60 * 60 * 24);
int hours = seconds / (60 * 60);
fhours = (float)seconds / (60.0 * 60.0);
seconds -= hours * (60 * 60);
int minutes = seconds / 60;
seconds -= minutes * 60;
// Update the timer clock
[elapsed setTitle:[NSString stringWithFormat:@"%.2i:%.2i:%.2i:%.2i",days,hours,minutes,seconds] forState:UIControlStateNormal];
}
}
Ответы:
Установите тип кнопки на UIButtonTypeCustom, и она перестанет мигать
источник
Лучшим подходом, чем тот,
[UIView setAnimationsEnabled:NO]
который может повлиять на другие анимации, является отключение только определенной анимации заголовка.Цель-C:
Swift:
источник
* Обратите внимание *
когда " buttonType " для _button равен "UIButtonTypeSystem" , приведенный ниже код недействителен:
когда " buttonType " _button равен "UIButtonTypeCustom" , приведенный выше код действителен .
источник
Смотрите ответы на вопрос Как остановить нежелательную анимацию UIButton при изменении заголовка? :
источник
layoutIfNeeded
:[elapsed layoutIfNeeded];
. В моем случае это убрало мигание.layoutIfNeeded
, похоже, он работаетВы можете просто сделать другую функцию для UIButton для облегчения использования в будущем.
Вот и все!
И просто установите заголовок, как и раньше, но замените
setTitle
наsetTitleWithoutAnimation
источник
Поведение по умолчанию "setTitle" определенно ненавистно!
Мое решение:
Кроме того, в раскадровке под свойством кнопки я снимаю флажок:
И проверьте:
Протестировано и работает на iOS 8 .
Обновление - Swift
Я предлагаю вам создать собственную кнопку и переопределить метод setTitle .
источник
Попробуйте это, это работает в новых версиях IOS:
источник
Я новичок в кодировании и Stackoverflow, поэтому у меня недостаточно репутации, чтобы напрямую комментировать, чтобы расширить https://stackoverflow.com/users/4673064/daniel-tseng отличный ответ. Поэтому мне нужно написать свой новый ответ, и он такой:
Отлично работает, КРОМЕ:
Если все мои последующие вызовы в коде для «setTitleWithoutAnimation» не указывают отправителя, то я получаю эти странные сообщения, связанные с CoreMedia или CoreData, например, «Не удалось наследовать разрешения CoreMedia от 2526: (null)»
Это, вероятно, довольно просто для кодирования и iOS, но для меня, как нового кодировщика, это на какое-то время отправило меня по кроличьему следу, например: Сегодня расширение не удалось наследовать разрешения CoreMedia , где у людей были интересные ответы, но это НЕ достичь корня моей проблемы.
Итак, я наконец обнаружил, что мне нужно пройти и передать параметры моих функций без параметров, то есть мне нужно указать отправителя. Этим отправителем может быть UIButton, Any или AnyObject. Все это сработало, но в конечном итоге, похоже, возник конфликт между добавлением расширения кнопки с помощью «self» и тем, что позже конкретно не сказано, что кнопка его использует.
Опять же, вероятно, базовый, но новый для меня, поэтому я подумал, что им стоит поделиться.
источник
Еще одна уловка
Это работает, только если вы знаете значение заголовка без каких-либо вызовов API. Название кнопки будет установлено до загрузки представления, поэтому вы не увидите анимацию.
источник