Wenn ich setTitle auf einem UIButton aufrufe, blinkt die Schaltfläche in iOS 7. Ich habe versucht, myButton.highlighted = NO zu setzen, aber das hat das Blinken der Schaltfläche nicht gestoppt.
[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];
myButton.highlighted = NO;
So habe ich den Timer eingerichtet, der die Titel aktualisiert hat:
- (void)actionTimer {
if (myTimer == nil) {
myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(showActivity)
userInfo: nil
repeats: YES];
}
}
Hier ist die Methode, mit der die Titel tatsächlich aktualisiert werden:
- (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];
}
}
Antworten:
Setzen Sie den Schaltflächentyp auf UIButtonTypeCustom und er hört auf zu blinken
quelle
Ein besserer Ansatz,
[UIView setAnimationsEnabled:NO]
der sich auf andere Animationen auswirken kann, besteht darin, nur die spezifische Titelanimation zu deaktivieren.Ziel c:
Schnell:
quelle
* Bitte beachten Sie *
Wenn " buttonType " von _button "UIButtonTypeSystem" ist , ist der folgende Code ungültig :
Wenn " buttonType " von _button "UIButtonTypeCustom" ist , ist der obige Code gültig .
quelle
Siehe die Antworten unter Wie kann ich unerwünschte UIButton-Animationen bei Titeländerungen stoppen? ::
quelle
layoutIfNeeded
:[elapsed layoutIfNeeded];
. Dies beseitigte das Blinken in meinem Fall.layoutIfNeeded
scheint jedoch zu funktionierenSie können einfach eine andere Funktion für UIButton erstellen, um die zukünftige Verwendung zu vereinfachen.
Das ist es!
Und setzen nur den Titel , wie Sie , bevor würde aber ersetzen
setTitle
mitsetTitleWithoutAnimation
quelle
Das Standardverhalten von "setTitle" ist definitiv hasserfüllt!
Meine Lösung ist:
Außerdem deaktiviere ich im Storyboard unter der Eigenschaft der Schaltfläche Folgendes:
Und prüfe:
Getestet und funktioniert auch unter iOS 8 .
Update - Schnell
Ich empfehle Ihnen, Ihre benutzerdefinierte Schaltfläche zu erstellen und die setTitle- Methode zu überschreiben .
quelle
Versuchen Sie dies, dies funktioniert in neueren Versionen von IOS:
quelle
Ich bin neu in Codierung und Stackoverflow, habe also nicht genug Ruf, um direkt Kommentare abzugeben, um https://stackoverflow.com/users/4673064/daniel-tseng zu erweitern. Hervorragende Antwort. Also muss ich meine eigene neue Antwort schreiben und es ist diese:
Funktioniert super, AUSSER:
Wenn alle meine Aufrufe später im Code zu "setTitleWithoutAnimation" keinen Absender angeben, erhalte ich diese seltsamen Nachrichten in Bezug auf CoreMedia oder CoreData, z. B. "Fehler beim Erben der CoreMedia-Berechtigungen von 2526: (null)".
Dies ist wahrscheinlich ziemlich einfach für Codierung und iOS, aber für mich als neuen Codierer hat es mich für eine Weile auf eine Kaninchenspur geschickt, wie in: Heute-Erweiterung konnte CoreMedia-Berechtigungen nicht erben , von denen die Leute interessante Antworten hatten, aber das tat es NICHT Erreiche die Wurzel meines Problems.
So stellte ich schließlich fest, dass ich meine parameterlosen Funktionsparameter durchgehen und angeben musste, dh ich musste einen Absender angeben. Dieser Absender kann UIButton, Any oder AnyObject sein. Alle diese Funktionen haben funktioniert, aber letztendlich scheint es einen Konflikt zwischen dem Hinzufügen einer Schaltflächenerweiterung mit "self" und dem späteren Hinweis zu geben, dass eine Schaltfläche diese verwendet.
Wieder wahrscheinlich einfach, aber neu für mich, also dachte ich, es würde sich lohnen, es zu teilen.
quelle
Ein weiterer Trick
Dies funktioniert nur, wenn Sie den Wert des Titels kennen, ohne API-Aufrufe durchzuführen. Der Titel der Schaltfläche wird vor dem Laden der Ansicht festgelegt, sodass die Animation nicht angezeigt wird
quelle