วิธีสร้าง UILabel โดยใช้โปรแกรม Swift


115

ฉันจะสร้างไฟล์ UILabelโปรแกรมโดยใช้ Swift ใน Xcode 6 ได้อย่างไร

ฉันได้เริ่มต้นด้วย "Single View Application" ใหม่ใน Xcode 6 และเลือก Swift สำหรับโปรเจ็กต์นี้ ฉันมีไฟล์ของฉันAppDelegate.swiftและViewController.swiftฉันไม่แน่ใจว่าจะทำจากที่นี่


1
ฉันขอแนะนำให้คุณเริ่มการศึกษาของคุณที่นี่: เอกสารอย่างรวดเร็วและหาทางไปยังบทแนะนำ Raywenderlich
Prashant

คำตอบ:


252
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+:

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)

2
คุณไม่จำเป็นต้องประกาศโดยปริยายว่าเป็น UILabel ซึ่งอนุมานได้จาก UILabel ()
CW0007007

5
คุณไม่ควรฮาร์ดโค้ดกรอบป้าย - จะเกิดอะไรขึ้นเมื่อข้อความเปลี่ยนแปลงหรือข้อความได้รับการแปลและเปลี่ยนจำนวนอักขระ
Zorayr

คุณยังสามารถตรวจสอบบล็อกนี้ที่อธิบายการเพิ่ม UITextField, UITextView และ UILabel โดยทางโปรแกรมได้ที่ webindream.com/how-to-change-ui-elements-programmatically
farhad rubel

@iSuresh คุณรู้ได้อย่างไรว่า CGPoint (x: 160, y: 285) จะเป็นศูนย์กลางสำหรับโมเดลที่พวกเขากำลังใช้อยู่?
Dave G

2
@rommex ต้องการทำเช่นนั้นโทรlabel.sizeToFit ()
Josh Wolff

27

นี่คือรหัสที่ถูกต้องสำหรับ Swift 3 พร้อมความคิดเห็นเพื่อวัตถุประสงค์ในการเรียนการสอน:

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)
}

ขอบคุณ Gourav - หวังว่ามันจะช่วยได้
Gene Loparco

14

หากต้องการเพิ่มคำตอบที่ดีอยู่แล้วคุณอาจต้องการเพิ่มป้ายกำกับหลายป้ายในโครงการของคุณดังนั้นการทำทั้งหมดนี้ (ขนาดการตั้งค่ารูปแบบ ฯลฯ ) จะเป็นเรื่องยาก ในการแก้ปัญหานี้คุณสามารถสร้างคลาส UILabel แยกต่างหาก

  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

    }

}

หากต้องการใช้ให้ทำดังต่อไปนี้

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)
     }


}

สิ่งที่ฉันกำลังมองหา!
madprogramer

ขอบคุณผู้ชายฉันมีคำถามถ้าฉันต้องการส่งสตริงเข้าไปself.textในชั้นเรียนเพื่อแยกเช่นนี้:myLabel = MyLabel(string: "text")
Daniel Beltrami

ฉันเพิ่งค้นพบวิธีใช้ชั้นเรียนของคุณและเรียกแบบนี้:myLabel.text = "text"
Daniel Beltrami

11

Swift 4.X และ 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)

หากคุณมีป้ายกำกับหลายป้ายในชั้นเรียนของคุณให้ใช้ส่วนขยายเพื่อเพิ่มคุณสมบัติ

//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()
    }
}

8

คุณสามารถสร้างป้ายกำกับโดยใช้รหัสด้านล่าง Updated

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)

5

อีกรหัส 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)

5

อีกทางเลือกหนึ่งในการใช้การปิดเพื่อแยกโค้ดออกเป็นสิ่งที่ดีกว่าเล็กน้อยโดยใช้ Swift 4:

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)
    }
}

หมายเหตุแอตทริบิวต์สำหรับtheLabelยังคงสามารถเปลี่ยนแปลงได้ทุกครั้งที่ใช้ฟังก์ชันใน VC คุณเพียงแค่ตั้งค่าเริ่มต้นต่างๆภายในการปิดและลดความยุ่งเหยิงในฟังก์ชันต่างๆเช่นviewDidLoad()


เทคนิคที่สวยงาม ... แต่มันไม่ได้ผลสำหรับฉันใน Xcode 9.4.1 ... เว้นแต่ฉันจะระบุเฟรมที่ใดที่หนึ่งในค่าที่คำนวณไม่ว่าจะในตัวสร้าง ( UILabel(frame:)) หรือที่อื่น ๆ ในบล็อก ( label.frame=) การตั้งค่าเฟรมในภายหลัง (เช่นในviewDidLayoutSubviews()) ทำให้ป้ายกำกับไม่ปรากฏขึ้น
Glenn

5

สร้างUILabelมุมมองภายนอกviewDidLoadชั้นเรียนแล้วเพิ่มมุมมองนั้นในมุมมองหลักของคุณในviewDidLoadวิธีการ

lazy var myLabel: UILabel = {


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

จากนั้นเพิ่มviewเข้าไปviewDidLoad()

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
}

@ ฉันรักการเข้ารหัสคุณช่วยอธิบายเกี่ยวกับรหัสของคุณได้ไหม [lazy var myLabel: UILabel = {} ()] จะเป็นประโยชน์มาก ขอบคุณ ....
iOS

1
@iOS เมื่อคุณสร้างตัวแปรเพราะlazy var variable_name = ""มันจะไม่ใช้หน่วยความจำของคุณเว้นแต่ว่าแอปของคุณจะเรียกตัวแปรนั้น หากไม่ได้ใช้คุณสมบัตินั้นจะไม่มีวันดำเนินการ
I Love Coding

จากนั้นเราจะสร้างตัวแปรทั้งหมดอย่างขี้เกียจในโครงการของเราเพื่อประสิทธิภาพที่ดีขึ้น ฉันถูกไหม?
iOS

@iOS เย้! ใช้ประเภทตัวแปรนั้นในแอปของคุณให้ดีขึ้นเพื่อประสิทธิภาพที่ดีขึ้น นอกจากนี้คุณควรตระหนักถึง Thread ด้วยเพื่อประสิทธิภาพที่ดีขึ้น
I Love Coding

3

สร้างฉลากได้อย่างรวดเร็ว 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)

1

Swift 4.2 และ Xcode 10 อยู่ที่ไหนสักแห่งใน 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
}()

...

โดยใช้:

debugInfoLabel.text = debugInfo

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)

ลองใช้โค้ดด้านบนใน ViewDidLoad


0

Swift 4.2 และ Xcode 10 เริ่มต้นป้ายกำกับก่อน viewDidLoad

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

ใน viewDidLoad เพิ่มป้ายกำกับในมุมมองและใช้ข้อ จำกัด

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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.