Kiedy wywołuję setTitle na UIButton, przycisk miga w iOS 7. Próbowałem ustawić myButton.highlighted = NIE, ale to nie powstrzymało migania przycisku.
[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];
myButton.highlighted = NO;
Oto jak ustawiłem licznik czasu, który aktualizował tytuły:
- (void)actionTimer {
if (myTimer == nil) {
myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(showActivity)
userInfo: nil
repeats: YES];
}
}
Oto metoda, która faktycznie aktualizuje tytuły:
- (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];
}
}
Odpowiedzi:
Ustaw typ przycisku na UIButtonTypeCustom i przestanie migać
źródło
Lepszym podejściem niż to,
[UIView setAnimationsEnabled:NO]
które może wpłynąć na inne animacje, jest wyłączenie tylko określonej animacji tytułu.Cel C:
Szybki:
źródło
* Uwaga *
gdy „ buttonType ” _button to „UIButtonTypeSystem” , poniższy kod jest nieprawidłowy:
gdy „ buttonType ” _button to „UIButtonTypeCustom” , powyższy kod jest prawidłowy .
źródło
Zobacz odpowiedzi z Jak zatrzymać niechcianą animację UIButton przy zmianie tytułu? :
źródło
layoutIfNeeded
:[elapsed layoutIfNeeded];
. To usunęło mruganie w moim przypadku.layoutIfNeeded
wydaje się działaćMożesz po prostu utworzyć kolejną funkcję dla UIButton, która będzie łatwa w użyciu w przyszłości.
To jest to!
I po prostu ustawić tytuł jak byś wcześniej, ale zastąpić
setTitle
zsetTitleWithoutAnimation
źródło
Domyślne zachowanie "setTitle" jest zdecydowanie nienawistne!
Moje rozwiązanie to:
Również w scenorysie, pod właściwością przycisku odznaczam:
I zaznacz:
Przetestowany i działający również na iOS 8 .
Aktualizacja - Swift
Sugeruję utworzenie własnego przycisku i zastąpienie metody setTitle .
źródło
Spróbuj tego, to działa w nowszych wersjach IOS:
źródło
Jestem nowy w kodowaniu i Stackoverflow, więc nie mam wystarczającej reputacji, aby komentować bezpośrednio, aby rozwinąć https://stackoverflow.com/users/4673064/daniel-tseng doskonałą odpowiedź. Muszę więc napisać własną nową odpowiedź, a jest ona taka:
Działa świetnie, Z WYJĄTKIEM:
Jeśli wszystkie moje wywołania później w kodzie „setTitleWithoutAnimation” nie określają nadawcy, otrzymuję te dziwne komunikaty związane z CoreMedia lub CoreData, np. „Nie udało się dziedziczyć uprawnień CoreMedia z 2526: (null)”
Jest to prawdopodobnie dość podstawowe dla kodowania i iOS, ale dla mnie, jako nowego programisty, wysłało mnie na jakiś czas na ślad królika, jak w: Today Extension Failed to dziedziczyć uprawnienia CoreMedia od , gdzie ludzie mieli ciekawe odpowiedzi, ale to NIE dotrzeć do źródła mojego problemu.
Więc w końcu stwierdziłem, że muszę przejść i podać parametry funkcji bez parametrów, tj. Musiałem określić nadawcę. Tym nadawcą może być UIButton, Any lub AnyObject. Wszystkie z nich zadziałały, ale ostatecznie wydaje się, że istnieje konflikt między dodaniem rozszerzenia przycisku za pomocą „siebie” a nie mówieniem później konkretnie, że przycisk go używa.
Ponownie, prawdopodobnie podstawowe, ale dla mnie nowe, więc pomyślałem, że warto się tym podzielić.
źródło
Kolejna sztuczka
Działa to tylko wtedy, gdy znasz wartość tytułu bez wykonywania żadnych wywołań API. Tytuł przycisku zostanie ustawiony przed załadowaniem widoku, więc nie zobaczysz animacji
źródło