ios colore - Cambiare il testo di UIButton in modo programmatico




bottone html (7)

Domanda semplice qui Ho un UIButton, currencySelector e voglio cambiare il testo a livello di programmazione. Ecco cosa ho:

currencySelector.text = "foobar"

Xcode mi dà l'errore "Dichiarazione prevista". Cosa sto facendo male e come posso cambiare il testo del pulsante?


Answers

Swift 3:

Imposta il titolo del pulsante:

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)

Swift 3.0

// Standard State
myButton.setTitle("Title", for: .normal)

Swift 4:

    for state: UIControlState in [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved] {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: state)
    }

Swift 3

Quando fai la @IBAction:

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

Questo imposta il mittente come UIButton (invece di Any) in modo che target btnAction come UIButton


Solo un chiarimento per quelli nuovi alla programmazione Swift e iOS . Sotto la riga di codice:

button.setTitle("myTitle", forState: UIControlState.Normal)

si applica solo a IBOutlets , non a IBActions .

Pertanto, se l'app utilizza un pulsante come funzione per eseguire codice, ad esempio per riprodurre musica e per modificare il titolo da Play a Pause base a una variabile di IBOutlet , è necessario creare anche un IBOutlet per quel pulsante.

Se si tenta di utilizzare button.setTitle contro IBAction si verificherà un errore. È ovvio una volta che lo sai, ma per i noobs (eravamo tutti) questo è un suggerimento utile.


Swift 3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(“Title Button”, for: .normal)

Ho impiegato un po 'di tempo per leggere il codice, oltre al codice nella pagina introdotta, e ho scoperto che tutti cercavano di modificare le dimensioni del fotogramma dell'etichetta, in modo che l'allineamento verticale centrale predefinito non venisse visualizzato.

Tuttavia, in alcuni casi vogliamo che l'etichetta occupi tutti quegli spazi, anche se l'etichetta ha così tanto testo (ad esempio più file con uguale altezza).

Qui, ho usato un modo alternativo per risolverlo, semplicemente UILabel i UILabel alla fine dell'etichetta (nota che in realtà ho ereditato l' UILabel , ma non è necessario):

CGSize fontSize = [self.text sizeWithFont:self.font];

finalHeight = fontSize.height * self.numberOfLines;
finalWidth = size.width;    //expected width of label

CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];

int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;

for(int i = 0; i < newLinesToPad; i++)
{
    self.text = [self.text stringByAppendingString:@"\n "];
}




ios xcode swift uibutton