स्विफ्ट का उपयोग करके प्रोग्राम को कैसे बनाएं?


115

मैं UILabelXcode 6 में स्विफ्ट का उपयोग करके प्रोग्रामेटिक रूप से कैसे बनाऊं ?

मैंने Xcode 6 में एक नए "सिंगल व्यू एप्लीकेशन" के साथ शुरुआत की है और इस परियोजना के लिए स्विफ्ट का चयन किया है। मेरे पास मेरी फाइलें हैं AppDelegate.swiftऔर ViewController.swiftमुझे यकीन नहीं है कि यहां से क्या करना है।


1
मेरा सुझाव है कि आप अपना अध्ययन यहां शुरू करें: स्विफ्ट प्रलेखन और रेवेंडरलिच ट्यूटोरियल्स के
प्रशांत

जवाबों:


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

स्विफ्ट 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
आपको इसे
उबैबेल के

5
आपको लेबल फ्रेम को हार्ड कोड नहीं करना चाहिए - क्या होता है जब पाठ परिवर्तन या पाठ स्थानीय हो जाता है और वर्णों की संख्या बदल जाता है?
जोरावर

आप इस ब्लॉग को भी देख सकते हैं जो प्रोग्राम को यूआईटेक्स्टफिल्ड, यूआईटीएक्सट्यूड
farhad

@iSuresh आप कैसे जानते हैं कि CGPoint (x: 160, y: 285) उस मॉडल के लिए केंद्र बनने जा रहा है जिसका वे उपयोग कर रहे हैं?
डेव जी

2
@rommex ऐसा करने के लिए, label.sizeToFit () पर कॉल करें ।
जोश वोल्फ

27

अनुदेशात्मक उद्देश्यों के लिए टिप्पणियों के साथ, स्विफ्ट 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)
}

धन्यवाद गौराव - आशा है कि यह मदद की
जीन लोपार्को

14

बस पहले से ही महान जवाबों को जोड़ने के लिए, आप अपनी परियोजना में कई लेबल जोड़ना चाह सकते हैं, इसलिए यह सब करना (आकार, शैली आदि स्थापित करना) एक दर्द होगा। इसे हल करने के लिए, आप एक अलग यूलैबेल क्लास बना सकते हैं।

  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")
डैनियल बेल्ट्रामी

मुझे अभी पता चला है कि कैसे, आपकी कक्षा का उपयोग करना और इस तरह से कॉल करना:myLabel.text = "text"
डैनियल बेल्ट्रामी

11

स्विफ्ट 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

आप नीचे दिए गए कोड का उपयोग करके एक लेबल बना सकते हैं। अपडेट किया गया।

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

एक और कोड स्विफ्ट 3

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

स्विफ्ट 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में, वीसी में फ़ंक्शंस का उपयोग करते समय, अभी भी विशेषताओं को बदला जा सकता है। आप बस बंद के अंदर विभिन्न चूक सेट कर रहे हैं और जैसे कार्यों में अव्यवस्था को कम कर रहे हैंviewDidLoad()


सुंदर तकनीक ... लेकिन यह मेरे लिए Xcode 9.4.1 में काम नहीं कर रहा है ... जब तक कि मैं गणना किए गए मूल्य में कहीं फ्रेम निर्दिष्ट नहीं करता, चाहे वह कंस्ट्रक्टर ( UILabel(frame:)) या ब्लॉक में कहीं और हो ( label.frame=)। फ्रेम की किसी भी बाद की सेटिंग (जैसे, viewDidLayoutSubviews()) लेबल दिखाई न देने का कारण बना।
ग्लेन

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
@ आईओएस जब आप वैरिएबल बनाते हैं तो lazy var variable_name = ""यह आपकी मेमोरी का उपभोग नहीं करेगा जब तक कि वह वैरिएबल आपके ऐप द्वारा कॉल न किया जाए। यदि उस संपत्ति का उपयोग नहीं किया जाता है तो वह कभी भी निष्पादित नहीं होगी।
आई लव कोडिंग

फिर हम बेहतर प्रदर्शन के लिए अपनी परियोजना में सभी चरों को आलसी बना देंगे। क्या मैं सही हू?
iOS

@iOS हाँ! बेहतर प्रदर्शन के लिए अपने एप्लिकेशन में उस चर प्रकार का बेहतर उपयोग करें। साथ ही, बेहतर प्रदर्शन के लिए आपको थ्रेड के बारे में भी जानकारी होनी चाहिए।
आई लव कोडिंग

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

स्विफ्ट ४.२ और Xcode १०। कहीं व्यू-कंट्रोलर में:

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

ViewDidLoad से पहले 4.2 और Xcode 10 प्रारंभिक लेबल स्विफ्ट करें।

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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.