কীভাবে ইউআইএলবেল প্রোগ্রামেটিকভাবে সুইফট ব্যবহার করে তৈরি করবেন?


115

UILabelএক্সকোড 6 এ সুইফট ব্যবহার করে আমি কীভাবে একটি প্রোগ্রামগতভাবে তৈরি করব ?

আমি এক্সকোড 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
আপনাকে এটিকে স্পষ্টভাবে ইউআইএলবেল হিসাবে ঘোষণা করার দরকার নেই, এটি ইউআইএলবেল () থেকে অনুমান করা হয়েছে
সিডাব্লু0007007

5
আপনার লেবেলগুলির ফ্রেমটিকে হার্ড কোড করা উচিত নয় - পাঠ্য পরিবর্তন বা পাঠ্য স্থানীয়ীকৃত হয় এবং অক্ষরের সংখ্যা পরিবর্তন হলে কী হয়?
জোড়ায়ার 6'15

: আপনি এই ব্লগে যে প্রোগ্রামেটিক্যালি UITextField, UITextView এবং UILabel যোগ বর্ণনা পরীক্ষা করতে পারবেন webindream.com/how-to-change-ui-elements-programmatically
ফরহাদ রুবেল

@ iSuresh আপনি কীভাবে জানবেন যে সিজিপিয়েন্ট (x: 160, y: 285) তারা যে মডেলটি ব্যবহার করছেন তা কেন্দ্র করে চলেছে?
ডেভ জি

2
@rommex এটি করতে কল করুন লেবেল.সাইজটোফিট ()
জোশ ওল্ফ

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


}

আমি কি খুঁজছিলাম!
ম্যাডপ্রোগ্রামার

self.textথ্যাঙ্কস ম্যান, আমার একটি প্রশ্ন আছে, যদি আমি এইভাবে জড়িত হওয়ার জন্য কোনও ক্লাসের ভিতরে একটি স্ট্রিং পাস করতে চাই:myLabel = MyLabel(string: "text")
ড্যানিয়েল বেল্ট্রামি

আমি কীভাবে আপনার ক্লাসটি ব্যবহার করে এবং এর মতো কল করেছিলাম তা খুঁজে পেয়েছি:myLabel.text = "text"
ড্যানিয়েল বেল্ট্রামি

11

সুইফট 4. এক্স এবং এক্সকোড 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

সুইফট 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
}

@ আমি ভালবাসি কোডিং, আপনি দয়া করে আপনার কোড সম্পর্কে ব্যাখ্যা করতে পারেন? [অলস ভার মাইলবেল: ইউিলাবেল = {} ()]। এটি অনেক সহায়ক হবে। ধন্যবাদ ....
আইওএস

1
@iOS আপনি যখন ভেরিয়েবল তৈরি করেন তখন lazy var variable_name = ""এটি আপনার মেমরি গ্রাস করবে না যতক্ষণ না আপনার অ্যাপ্লিকেশনটির মাধ্যমে সেই ভেরিয়েবলটি কল না করা হয়। যদি সেই সম্পত্তি ব্যবহার না করা হয় তবে তা কখনই কার্যকর হবে না।
আমি

তারপরে আমরা আরও ভাল পারফরম্যান্সের জন্য আমাদের প্রকল্পে অলস হিসাবে সমস্ত ভেরিয়েবল তৈরি করব। আমি কি সঠিক?
আইওএস

@ আইওএস হ্যাঁ! আরও ভাল পারফরম্যান্সের জন্য আপনার অ্যাপ্লিকেশনে সেই পরিবর্তনশীল ধরণটি আরও ভাল ব্যবহার করুন। এছাড়াও, আপনার আরও ভাল পারফরম্যান্সের জন্য থ্রেড সম্পর্কে সচেতন করতে সক্ষম হওয়া উচিত।
আমি

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

সুইচ ৪.২ এবং এক্সকোড ১০ কোথাও ভিউকন্ট্রোলারের মধ্যে:

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)

ভিউডিডলডে উপরের কোডটি চেষ্টা করুন


0

সুইড 4.2 এবং এক্সকোড 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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.