2016-07-13 8 views
0

Ich möchte auf klicken Sie auf die Schaltfläche, um die Tasten Titel ändern:UIButton nicht ändert Titel

func dispatchStatusButton(title title:String, backgroundColor:UIColor) { 
    self.btnDispatchStatus.setTitleWithoutAnimation(title.uppercaseString) 
    self.btnDispatchStatus.backgroundColor = backgroundColor 
    self.btnDispatchStatus.kern(2.0) 
} 

Wenn ich die Funktion aufrufen:

// Set Button 
self.dispatchStatusButton(title: "Inaktiv", backgroundColor: UIColor(red: 40.0/255.0, green: 51.0/255.0, blue: 57.0/255.0, alpha: 1.0)) 

Es passiert nichts, und ich habe meine Kerning-Funktion einige Gefühl der Grund ist, aber ich sehe nicht, warum:

extension UIButton { 
    func setTitleWithoutAnimation(title:String?) { 
     UIView.setAnimationsEnabled(false) 
     setTitle(title, forState: .Normal) 
     layoutIfNeeded() 
     UIView.setAnimationsEnabled(true) 
    } 

    func kern(kerningValue:CGFloat) { 
     let attributedText = NSAttributedString(string: self.titleLabel!.text!, attributes: [NSKernAttributeName:kerningValue, NSFontAttributeName:self.titleLabel!.font, NSForegroundColorAttributeName:self.titleLabel!.textColor]) 
     self.setAttributedTitle(attributedText, forState: UIControlState.Normal) 
    } 
} 
+0

Mein Ansatz mit dieser Art von Problemen ist es, den Code so viel wie möglich zu vereinfachen und schrittweise Codezeilen wieder einzuführen. Haben Sie ohne die Aufrufe von 'UIView.setAnimationsEnabled' versucht? –

+0

Ich habe jetzt herausgefunden, dass die Kern-Funktion das Problem ist. sobald ich es wieder deaktiviere funktioniert es. Aber warum wird der Text bei der Verwendung nicht aktualisiert? – sesc360

+0

Schau dir meine Antwort an, ich habe es getestet. –

Antwort

2

das Problem ist, dass self.titleLabel.text Eigenschaft ruft aktualisiert im folgenden Layout-Durchlauf. Deshalb setzen Sie den Titel über die Funktion setTitle(:forState:) und nicht direkt auf das Label. In Ihrer Kern-Funktion verweisen Sie darauf, wenn sie noch nicht aktualisiert ist. Versuchen Sie folgendes:

+0

genial .. danke! – sesc360

Verwandte Themen