Wie erstelle ich UILabel programmgesteuert mit Swift?

115

Wie erstelle ich UILabelprogrammgesteuert mit Swift in Xcode 6?

Ich habe mit einer neuen "Single View-Anwendung" in Xcode 6 begonnen und Swift für dieses Projekt ausgewählt. Ich habe meine Dateien AppDelegate.swiftund ViewController.swiftbin mir nicht sicher, was ich von hier aus tun soll.

Akhtar
quelle
1
Ich schlage vor, Sie beginnen Ihr Studium hier: Schnelle Dokumentation und arbeiten Sie sich zu Raywenderlich Tutorials
Prashant

Antworten:

251
override func viewDidLoad()
{
  super.viewDidLoad()
  var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
  label.center = CGPointMake(160, 284)
  label.textAlignment = NSTextAlignment.Center
  label.text = "I'm a test label"
  self.view.addSubview(label)
}  

Swift 3.0+ Update:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .center
label.text = "I'm a test label"
self.view.addSubview(label)
iSuresh
quelle
2
Sie müssen dies nicht implizit als UILabel deklarieren, es wird aus UILabel ()
CW0007007
5
Sie sollten den Beschriftungsrahmen nicht hart codieren - was passiert, wenn sich Text ändert oder Text lokalisiert wird und die Anzahl der Zeichen ändert?
Zorayr
Sie können auch diesen Blog überprüfen, der das programmgesteuerte Hinzufügen von UITextField, UITextView und UILabel beschreibt: webindream.com/how-to-change-ui-elements-programmatic
farhad rubel
@iSuresh woher weißt du, dass CGPoint (x: 160, y: 285) das Zentrum für das Modell sein wird, das sie verwenden?
Dave G
2
@rommex Dazu Anruf label.sizeToFit () .
Josh Wolff
26

Hier ist der richtige Code für Swift 3 mit Kommentaren zu Unterrichtszwecken:

override func viewDidLoad()
{
    super.viewDidLoad()

    // CGRectMake has been deprecated - and should be let, not var
    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))

    // you will probably want to set the font (remember to use Dynamic Type!)
    label.font = UIFont.preferredFont(forTextStyle: .footnote)

    // and set the text color too - remember good contrast
    label.textColor = .black

    // may not be necessary (e.g., if the width & height match the superview)
    // if you do need to center, CGPointMake has been deprecated, so use this
    label.center = CGPoint(x: 160, y: 284)

    // this changed in Swift 3 (much better, no?)
    label.textAlignment = .center

    label.text = "I am a test label"

    self.view.addSubview(label)
}
Gene Loparco
quelle
Danke Gourav - hoffe es hat geholfen
Gene Loparco
14

Um die bereits guten Antworten zu ergänzen, möchten Sie möglicherweise mehrere Beschriftungen in Ihr Projekt einfügen, sodass all dies (Festlegen von Größe, Stil usw.) mühsam ist. Um dies zu lösen, können Sie eine separate UILabel-Klasse erstellen.

  import UIKit

  class MyLabel: UILabel {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initializeLabel()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        initializeLabel()
    }

    func initializeLabel() {

        self.textAlignment = .left
        self.font = UIFont(name: "Halvetica", size: 17)
        self.textColor = UIColor.white

    }

}

Gehen Sie wie folgt vor, um es zu verwenden

import UIKit

class ViewController: UIViewController {

     var myLabel: MyLabel()

     override func viewDidLoad() {
          super.viewDidLoad()

          myLabel = MyLabel(frame: CGRect(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 2, width: 100, height: 20))
          self.view.addSubView(myLabel)
     }


}
Cyril
quelle
Genau das, wonach ich gesucht habe!
Madprogramer
Vielen Dank, Mann, ich habe eine Frage, ob ich eine Zeichenfolge an self.texteine Klasse weitergeben möchte, um Folgendes zu initiieren:myLabel = MyLabel(string: "text")
Daniel Beltrami
Ich finde gerade heraus, wie, benutze deine Klasse und rufe so an:myLabel.text = "text"
Daniel Beltrami
11

Swift 4.X und Xcode 10

let lbl = UILabel(frame: CGRect(x: 10, y: 50, width: 230, height: 21))
lbl.textAlignment = .center //For center alignment
lbl.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl.textColor = .white
lbl.backgroundColor = .lightGray//If required
lbl.font = UIFont.systemFont(ofSize: 17)

//To display multiple lines in label
lbl.numberOfLines = 0 //If you want to display only 2 lines replace 0(Zero) with 2.
lbl.lineBreakMode = .byWordWrapping //Word Wrap
// OR
lbl.lineBreakMode = .byCharWrapping //Charactor Wrap

lbl.sizeToFit()//If required
yourView.addSubview(lbl)

Wenn Ihre Klasse mehrere Beschriftungen enthält, verwenden Sie die Erweiterung, um Eigenschaften hinzuzufügen.

//Label 1
let lbl1 = UILabel(frame: CGRect(x: 10, y: 50, width: 230, height: 21))
lbl1.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl1.myLabel()//Call this function from extension to all your labels
view.addSubview(lbl1)

//Label 2
let lbl2 = UILabel(frame: CGRect(x: 10, y: 150, width: 230, height: 21))
lbl2.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl2.myLabel()//Call this function from extension to all your labels
view.addSubview(lbl2)

extension UILabel {
    func myLabel() {
        textAlignment = .center
        textColor = .white
        backgroundColor = .lightGray
        font = UIFont.systemFont(ofSize: 17)
        numberOfLines = 0
        lineBreakMode = .byCharWrapping
        sizeToFit()
    }
}
iOS
quelle
8

Sie können eine Beschriftung mit dem folgenden Code erstellen. Aktualisiert.

let yourLabel: UILabel = UILabel()
yourLabel.frame = CGRect(x: 50, y: 150, width: 200, height: 21)
yourLabel.backgroundColor = UIColor.orange
yourLabel.textColor = UIColor.black
yourLabel.textAlignment = NSTextAlignment.center
yourLabel.text = "test label"
self.view.addSubview(yourLabel)
Tushar Korde
quelle
5

Erstellen Sie eine UILabelAnsicht außerhalb der viewDidLoadKlasse und fügen Sie diese Ansicht dann Ihrer Hauptansicht in viewDidLoadmethod hinzu.

lazy var myLabel: UILabel = {


    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "This is label view."
    label.font = UIFont.systemFont(ofSize: 12)
    return label
}()

Und fügen Sie dann , dass viewinviewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(myLabel)

    // Set its constraint to display it on screen
    myLabel.widthAnchor.constraint(equalToConstant:  200).isActive = true
    myLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    myLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
Ich liebe Codierung
quelle
@I Love Coding, können Sie bitte über Ihren Code erklären. [faul var myLabel: UILabel = {} ()]. Es wird sehr hilfreich sein. Vielen Dank ....
iOS
1
@iOS Wenn Sie eine Variable erstellen, lazy var variable_name = ""die Ihren Speicher nur beansprucht, wenn diese Variable von Ihrer App aufgerufen wird. Wenn diese Eigenschaft nicht verwendet wird, wird sie niemals ausgeführt.
Ich liebe Codierung
Dann werden wir alle Variablen in unserem Projekt als faul für eine bessere Leistung erstellen. Habe ich recht?
iOS
@iOS ja! Verwenden Sie diesen Variablentyp besser in Ihrer App, um eine bessere Leistung zu erzielen. Außerdem sollten Sie in der Lage sein, Thread zu kennen, um eine bessere Leistung zu erzielen.
Ich liebe Codierung
4

Ein weiterer Code swift3

let myLabel = UILabel()
    myLabel.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    myLabel.center = CGPoint(x: 0, y: 0)
    myLabel.textAlignment = .center
    myLabel.text = "myLabel!!!!!"
    self.view.addSubview(myLabel)
Ryosuke Hujisawa
quelle
4

Eine Alternative mit einem Verschluss, um den Code mit Swift 4 in etwas Ordentlicheres zu zerlegen:

class theViewController: UIViewController {

    /** Create the UILabel */
    var theLabel: UILabel = {
        let label = UILabel()
        label.lineBreakMode = .byWordWrapping
        label.textColor = UIColor.white
        label.textAlignment = .left
        label.numberOfLines = 3
        label.font = UIFont(name: "Helvetica-Bold", size: 22)
        return label
    }()

    override func viewDidLoad() {
        /** Add theLabel to the ViewControllers view */
        view.addSubview(theLabel)
    }

    override func viewDidLayoutSubviews() {
        /* Set the frame when the layout is changed */
        theLabel.frame = CGRect(x: 0,
                                y: 0,
                                width: view.frame.width - 30,
                                height: 24)
    }
}

Hinweis: Attribute für theLabelkönnen immer noch geändert werden, wenn Funktionen in der VC verwendet werden. Sie setzen nur verschiedene Standardeinstellungen innerhalb des Verschlusses und minimieren die Unordnung in Funktionen wieviewDidLoad()

Erzdoog
quelle
Schöne Technik ... aber sie funktioniert bei Xcode 9.4.1 nicht ... es sei denn, ich gebe den Frame irgendwo im berechneten Wert an, sei es im Konstruktor ( UILabel(frame:)) oder an anderer Stelle im Block ( label.frame=). Jede spätere Einstellung des Rahmens (z. B. in viewDidLayoutSubviews()) führte dazu, dass die Beschriftung nicht angezeigt wurde.
Glenn
2

Erstellen Sie schnell ein Etikett 4

 let label = UILabel(frame: CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 50))
    label.textAlignment = .center
    label.text = "Hello this my label"

    //To set the color
    label.backgroundColor = UIColor.white
    label.textColor = UIColor.black

    //To set the font Dynamic
    label.font = UIFont(name: "Helvetica-Regular", size: 20.0)

    //To set the system font
    label.font = UIFont.systemFont(ofSize: 20.0)

    //To display multiple lines
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping //Wrap the word of label
    label.lineBreakMode = .byCharWrapping //Wrap the charactor of label

    label.sizeToFit()
    self.view.addSubview(label)
Bhavisha Khatri
quelle
1

Swift 4.2 und Xcode 10. Irgendwo in ViewController:

private lazy var debugInfoLabel: UILabel = {
    let label = UILabel()
    label.textColor = .white
    label.translatesAutoresizingMaskIntoConstraints = false
    yourView.addSubview(label)
    NSLayoutConstraint.activate([
        label.centerXAnchor.constraint(equalTo: suggestionView.centerXAnchor),
        label.centerYAnchor.constraint(equalTo: suggestionView.centerYAnchor, constant: -100),
        label.widthAnchor.constraint(equalToConstant: 120),
        label.heightAnchor.constraint(equalToConstant: 50)])
    return label
}()

...

Verwenden von:

debugInfoLabel.text = debugInfo
Olga Grineva
quelle
0
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .center
label.text = "My label"
self.view.addSubview(label)

Versuchen Sie den obigen Code in ViewDidLoad


quelle
0

Swift 4.2 und Xcode 10 Initialisieren Sie das Label vor viewDidLoad.

lazy var topLeftLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "TopLeft"
    return label
}()

Fügen Sie in viewDidLoad der Ansicht eine Beschriftung hinzu und wenden Sie Einschränkungen an.

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(topLeftLabel)
    topLeftLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true
    topLeftLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
}
Sudhi 9135
quelle