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


130

আমি ইউআই এর প্রোগ্রামগতভাবে তৈরি করার চেষ্টা করছি। আমি এই ক্রিয়াটি কীভাবে কাজ করব? আমি সুইফটের সাথে বিকাশ করছি।

দ্যডলিডে কোড

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let myFirstLabel = UILabel()
        let myFirstButton = UIButton()
        myFirstLabel.text = "I made a label on the screen #toogood4you"
        myFirstLabel.font = UIFont(name: "MarkerFelt-Thin", size: 45)
        myFirstLabel.textColor = UIColor.redColor()
        myFirstLabel.textAlignment = .Center
        myFirstLabel.numberOfLines = 5
        myFirstLabel.frame = CGRectMake(15, 54, 300, 500)
        myFirstButton.setTitle("✸", forState: .Normal)
        myFirstButton.setTitleColor(UIColor.blueColor(), forState: .Normal)
        myFirstButton.frame = CGRectMake(15, -50, 300, 500)
        myFirstButton.addTarget(self, action: "pressed", forControlEvents: .TouchUpInside)
        self.view.addSubview(myFirstLabel)
        self.view.addSubview(myFirstButton)
    }

        func pressed(sender: UIButton!) {
            var alertView = UIAlertView();
            alertView.addButtonWithTitle("Ok");
            alertView.title = "title";
            alertView.message = "message";
            alertView.show();
        }

উত্তর:


202

আপনি কেবল নির্বাচক নামের শেষে কোলন অনুপস্থিত। যেহেতু চাপলে একটি পরামিতি লাগে, কোলন অবশ্যই সেখানে উপস্থিত থাকে। এছাড়াও আপনার চাপিত ক্রিয়াকলাপটি ভিডডিডোডের ভিতরে বাসাতে হবে না।

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let myFirstLabel = UILabel()
    let myFirstButton = UIButton()
    myFirstLabel.text = "I made a label on the screen #toogood4you"
    myFirstLabel.font = UIFont(name: "MarkerFelt-Thin", size: 45)
    myFirstLabel.textColor = UIColor.redColor()
    myFirstLabel.textAlignment = .Center
    myFirstLabel.numberOfLines = 5
    myFirstLabel.frame = CGRectMake(15, 54, 300, 500)
    myFirstButton.setTitle("✸", forState: .Normal)
    myFirstButton.setTitleColor(UIColor.blueColor(), forState: .Normal)
    myFirstButton.frame = CGRectMake(15, -50, 300, 500)
    myFirstButton.addTarget(self, action: #selector(myClass.pressed(_:)), forControlEvents: .TouchUpInside)
    self.view.addSubview(myFirstLabel)
    self.view.addSubview(myFirstButton)
}

@objc func pressed(sender: UIButton!) {
    var alertView = UIAlertView()
    alertView.addButtonWithTitle("Ok")
    alertView.title = "title"
    alertView.message = "message"
    alertView.show()
}

সম্পাদনা: সুইফট ২.২-এ সেরা অনুশীলনগুলি প্রতিবিম্বিত করতে আপডেট হয়েছে। আক্ষরিক স্ট্রিংয়ের পরিবর্তে # সিলেক্টর () ব্যবহার করা উচিত যা অবনতিযুক্ত।


আমি বোতাম টিপলে অ্যাপটি এখনও ক্র্যাশ হয়ে যায়।
বেনার 783

দুঃখিত স্থির। ফাংশনটি নেস্ট করা উচিত নয়।
ড্যাশ

1
আরে, আপনি আমাকে কোলনের পিছনে যুক্তিটি বলতে পারেন যে কর্মটি প্রতিনিধিত্ব করে এমন স্ট্রিংয়ের পরে আমাদের যুক্ত করা উচিত?
জুনিয়রগার্সিয়া

2
@ chorajunior কোলনটির প্রয়োজন কারণ pressedফাংশনটি একটি আর্গুমেন্ট নেয়।
হিউঘুঘটওটল

বিপরীতভাবে, যে কেউ এটি পড়তে পারে তাও জানতে চাইতে পারেন যে আপনার বোতামের ক্রিয়া যদি কোনও ফাংশন উল্লেখ করে যা কোনও পরামিতি নেয় না, তবে কোলনের প্রয়োজন হয় না এবং এমনকি অপসারণ না হয়েও ত্রুটির কারণ হতে পারে।
ডেভ জি

60

সুইফট 2.2 এক্সকোড 7.3

যেহেতু অবজেক্টিভ-সি স্ট্রিং লিটারালগুলি এখন বোতাম কলব্যাক পদ্ধতিগুলির জন্য অবচিত করা হয়েছে

let button:UIButton = UIButton(frame: CGRectMake(100, 400, 100, 50))
button.backgroundColor = UIColor.blackColor()
button.setTitle("Button", forState: UIControlState.Normal)
button.addTarget(self, action:#selector(self.buttonClicked), forControlEvents: .TouchUpInside)
self.view.addSubview(button)

func buttonClicked() {
     print("Button Clicked")
}

সুইফট 3 এক্সকোড 8

let button:UIButton = UIButton(frame: CGRect(x: 100, y: 400, width: 100, height: 50))
button.backgroundColor = .black
button.setTitle("Button", for: .normal)
button.addTarget(self, action:#selector(self.buttonClicked), for: .touchUpInside)
self.view.addSubview(button)

func buttonClicked() {
    print("Button Clicked")
}

সুইফট 4 এক্সকোড 9

let button:UIButton = UIButton(frame: CGRect(x: 100, y: 400, width: 100, height: 50))
button.backgroundColor = .black
button.setTitle("Button", for: .normal)
button.addTarget(self, action:#selector(self.buttonClicked), for: .touchUpInside)
self.view.addSubview(button)

@objc func buttonClicked() {
    print("Button Clicked")
}

2
@ n.by.n কীভাবে এই পদ্ধতিতে যুক্তিটি পাস করবেন বাটন ক্লিক ()?
আরগাপিকে

20

সুইফট 4/5

let button = UIButton(frame: CGRect(x: 20, y: 20, width: 200, height: 60))
 button.setTitle("Email", for: .normal)
 button.backgroundColor = .white
 button.setTitleColor(UIColor.black, for: .normal)
 button.addTarget(self, action: #selector(self.buttonTapped), for: .touchUpInside)
 myView.addSubview(button)



@objc func buttonTapped(sender : UIButton) {
                //Write button action here
            }

15

সুইফট 4

    private func createButton {
        let sayButtonT = UIButton(type: .custom)
        sayButtonT.addTarget(self, action: #selector(sayAction(_:)), for: .touchUpInside)
    }

    @objc private func sayAction(_ sender: UIButton?) {

    }

12

হ্যাঁ সিমুলেটারে। কিছু সময় এটি নির্বাচককে স্বীকৃতি দেয় না এমন একটি বাগ রয়েছে বলে মনে হয়। এমনকি আমি আপনার কোডটির জন্য মুখোমুখি হইনি, তবে আমি সবেমাত্র ক্রিয়াটির নাম (নির্বাচক) পরিবর্তন করেছি changed এটা কাজ করে

let buttonPuzzle:UIButton = UIButton(frame: CGRectMake(100, 400, 100, 50))
buttonPuzzle.backgroundColor = UIColor.greenColor()
buttonPuzzle.setTitle("Puzzle", forState: UIControlState.Normal)
buttonPuzzle.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
buttonPuzzle.tag = 22;
self.view.addSubview(buttonPuzzle)

একটি উদাহরণ নির্বাচক ফাংশন এখানে:

func buttonAction(sender:UIButton!) {
    var btnsendtag:UIButton = sender
    if btnsendtag.tag == 22 {            
        //println("Button tapped tag 22")
    }
}

8

আপনি অ্যাক্সেস করার মাধ্যমে প্রোগ্রামের মাধ্যমে একটি কাস্টমাইজ UI 'তে বোতাম তৈরি করতে সক্ষম হওয়া উচিত titleLabel সম্পত্তির UIButton

প্রতি শ্রেণীর রেফারেন্সে রেফারেন্স : শিরোনাম লেবেল সম্পর্কিত সম্পত্তি সম্পর্কিত, এটি বলে যে "যদিও এই সম্পত্তিটি কেবল পঠনযোগ্য তবে তার নিজস্ব বৈশিষ্ট্যগুলি পঠন / লেখার জন্য। এই বৈশিষ্ট্যগুলিকে প্রাথমিকভাবে বোতামের পাঠ্যটি কনফিগার করতে ব্যবহার করুন।"

ইন সুইফট , আপনি সরাসরি এই ধরনের মত titleLabel বৈশিষ্ট্য পরিবর্তন করতে পারবেন:

let myFirstButton = UIButton()
myFirstButton.titleLabel!.text = "I made a label on the screen #toogood4you"
myFirstButton.titleLabel!.font = UIFont(name: "MarkerFelt-Thin", size: 45)
myFirstButton.titleLabel!.textColor = UIColor.red
myFirstButton.titleLabel!.textAlignment = .center
myFirstButton.titleLabel!.numberOfLines = 5
myFirstButton.titleLabel!.frame = CGRect(x: 15, y: 54, width: 300, height: 500)

সম্পাদন করা

সুইফট ৩.১ সিন্ট্যাক্স


1
আমি এই কোডটি চালানোর চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করছে না। লেবেল শিরোনামের চিডল্রেনগুলির মধ্যে উপস্থিত নেই বলে মনে হয়
ব্যবহারকারী 2202911

7

এগুলি চেষ্টা করুন ... আমি আশা করি এটি সাহায্য করে ...

override func viewDidLoad() {
super.viewDidLoad()  

    let btn = UIButton()
    btn.frame = CGRectMake(10, 10, 50, 50)  //set frame
    btn.setTitle("btn", forState: .Normal)  //set button title
    btn.setTitleColor(UIColor.redColor(), forState: .Normal) //set button title color
    btn.backgroundColor = UIColor.greenColor() //set button background color
    btn.tag = 1 // set button tag
    btn.addTarget(self, action: "btnclicked:", forControlEvents: .TouchUpInside) //add button action
    self.view.addSubview(btn) //add button in view

}

এগুলি হল ইভেন্টগুলিতে ক্লিক করুন ..

func btnclicked(sender: UIButton!) 
{
    //write the task you want to perform on buttons click event..
}

3

সুইফট 3: আপনি একটি তৈরি করতে পারেন UIButton প্রোগ্রামগতভাবে

হয় কোনও পদ্ধতির স্কোপের ভিতরে উদাহরণস্বরূপ ViewDidLoad() বোতামটিতে সীমাবদ্ধতা যুক্ত করার বিষয়ে নিশ্চিত হন, অন্যথায় আপনি এটি দেখতে পাবেন না

let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.target(forAction: #selector(buttonAction), withSender: self)
//button.backgroundColor etc

view.addSubview(button)

func buttonAction() {
   //some Action
}

বা আপনার যে কোনও জায়গা থেকে এটিকে অ্যাক্সেস করতে বৈশ্বিক পরিবর্তনশীল হিসাবে আপনার সুযোগের বাইরে module

let button: UIButton = {
   let b = UIButton()
   b.translatesAutoresizingMaskIntoConstraints = false
   //b.backgroundColor etc
   return b
}()

এবং তারপরে আপনি সীমাবদ্ধতাগুলি সেটআপ করুন

func setupButtonView() {
   view.addSubview(button)
   button.widthAnchor.constraint(equalToConstant: 40).isActive = true
   button.heightAnchor.constraint(equalToConstant: 40).isActive = true
   // etc

}

2

সুইফট: ইউআই বাটন প্রোগ্রামগতভাবে তৈরি করে,

var button: UIButton = UIButton(type: .Custom)

button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0)

button.addTarget(self, action: #selector(self.aMethod), forControlEvents: .TouchUpInside)

button.tag=2

button.setTitle("Hallo World", forState: .Normal)

view.addSubview(button)


func aMethod(sender: AnyObject) {
    print("you clicked on button \(sender.tag)")
}

2

ইউআইবাটনের জন্য সুইফ্ট "বাটন ফ্যাক্টরি" এক্সটেনশান (এবং আমরা এটিতে থাকাকালীনও) ইউআইএলবেলের জন্যও এর মতো:

extension UILabel
{
// A simple UILabel factory function
// returns instance of itself configured with the given parameters

// use example (in a UIView or any other class that inherits from UIView):

//   addSubview(   UILabel().make(     x: 0, y: 0, w: 100, h: 30,
//                                   txt: "Hello World!",
//                                 align: .center,
//                                   fnt: aUIFont,
//                              fntColor: UIColor.red)                 )
//

func make(x: CGFloat, y: CGFloat, w: CGFloat, h: CGFloat,
          txt: String,
          align: NSTextAlignment,
          fnt: UIFont,
          fntColor: UIColor)-> UILabel
{
    frame = CGRect(x: x, y: y, width: w, height: h)
    adjustsFontSizeToFitWidth = true
    textAlignment = align
    text = txt
    textColor = fntColor
    font = fnt
    return self
}
// Of course, you can make more advanced factory functions etc.
// Also one could subclass UILabel, but this seems to be a     convenient case for an extension.
}


extension UIButton
{
// UIButton factory returns instance of UIButton
//usage example:

// addSubview(UIButton().make(x: btnx, y:100, w: btnw, h: btnh,
// title: "play", backColor: .red,
// target: self,
// touchDown: #selector(play), touchUp: #selector(stopPlay)))


func make(   x: CGFloat,y: CGFloat,
             w: CGFloat,h: CGFloat,
                  title: String, backColor: UIColor,
                  target: UIView,
                  touchDown:  Selector,
                  touchUp:    Selector ) -> UIButton
{
    frame = CGRect(x: x, y: y, width: w, height: h)
    backgroundColor = backColor
    setTitle(title, for: .normal)
    addTarget(target, action: touchDown, for: .touchDown)
    addTarget(target, action: touchUp  , for: .touchUpInside)
    addTarget(target, action: touchUp  , for: .touchUpOutside)

    return self
}
}

এক্সকোড সংস্করণ 9.2 (9C40b) সুইফটে 4.x এ সুইফটে পরীক্ষিত


1

সুইফট: ইউআই বাটন প্রোগ্রামগতভাবে তৈরি করে

let myButton = UIButton() 
myButton.titleLabel!.frame = CGRectMake(15, 54, 300, 500) 
myButton.titleLabel!.text = "Button Label"
myButton.titleLabel!.textColor = UIColor.redColor()
myButton.titleLabel!.textAlignment = .Center

1

সুইফ্ট 3 এক্সকোড 8 এর জন্য .......

let button = UIButton(frame: CGRect(x: 0, y: 0, width: container.width, height: container.height))
        button.addTarget(self, action: #selector(self.barItemTapped), for: .touchUpInside)


func barItemTapped(sender : UIButton) {
    //Write button action here
}

0

এতে সীমাবদ্ধতা সহ ইউআইবাটন iOS 9.1/Xcode 7.1.1/Swift 2.1:

import UIKit
import MapKit

class MapViewController: UIViewController {  

    override func loadView() {
        mapView = MKMapView()  //Create a view...
        view = mapView         //assign it to the ViewController's (inherited) view property.
                               //Equivalent to self.view = mapView

        myButton = UIButton(type: .RoundedRect)  //RoundedRect is an alias for System (tested by printing out their rawValue's)
        //myButton.frame = CGRect(x:50, y:500, width:70, height:50)  //Doesn't seem to be necessary when using constraints.
        myButton.setTitle("Current\nLocation", forState: .Normal)
        myButton.titleLabel?.lineBreakMode = .ByWordWrapping  //If newline in title, split title onto multiple lines
        myButton.titleLabel?.textAlignment = .Center
        myButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
        myButton.layer.cornerRadius = 6   //For some reason, a button with type RoundedRect has square corners
        myButton.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5) //Make the color partially transparent
        //Attempt to add padding around text. Shrunk the frame when I tried it.  Negative values had no effect.
        //myButton.titleEdgeInsets = UIEdgeInsetsMake(-10,-10,-10,-10)
        myButton.contentEdgeInsets = UIEdgeInsetsMake(5,5,5,5)  //Add padding around text.

        myButton.addTarget(self, action: "getCurrentLocation:", forControlEvents: .TouchUpInside)
        mapView.addSubview(myButton)

        //Button Constraints:
        myButton.translatesAutoresizingMaskIntoConstraints = false //***
        //bottomLayoutGuide(for tab bar) and topLayoutGuide(for status bar) are properties of the ViewController
        //To anchor above the tab bar on the bottom of the screen:
        let bottomButtonConstraint = myButton.bottomAnchor.constraintEqualToAnchor(bottomLayoutGuide.topAnchor, constant: -20) //Implied call of self.bottomLayoutGuide. Anchor 20 points **above** the top of the tab bar.
        //To anchor to the blue guide line that is inset from the left 
        //edge of the screen in InterfaceBuilder:
        let margins = view.layoutMarginsGuide  //Now the guide is a property of the View.
        let leadingButtonConstraint = myButton.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor)

        bottomButtonConstraint.active = true
        leadingButtonConstraint.active = true
    }


    func getCurrentLocation(sender: UIButton) {
        print("Current Location button clicked!")
    }

বোতামটি নীচে বাম কোণে ট্যাব বারের উপরে নোঙ্গর করা আছে।


getCurrentLocationদয়া করে অবস্থানটি পেতে আমাদের কীভাবে সহায়তা করে?
nyxee

@nyxee, এখানে প্রশ্নটি ছিল প্রোগ্রামটিমেটিকভাবে কীভাবে একটি বোতাম তৈরি করা যায়। কোনও বোতাম তৈরির সাথে কোনও ব্যবহারকারীর অবস্থান পাওয়ার কোনও সম্পর্ক নেই। ব্যবহারকারীর অবস্থান পেতে এখানে দেখুন; বিকাশকারী.অ্যাপল . com/ রেফারেন্স / কোরিওলকেশন / ক্লোকেশনম্যানার । যদি আপনি এটি বের করতে না পারেন, দয়া করে আপনার নিজের প্রশ্ন জিজ্ঞাসা করুন।
7stud

0

সুইফটে আমরা আমাদের ভিউকন্ট্রোলআর সুইট ফাইলটিতে এই কোডটি লিখে প্রোগ্রামিয়ালি একটি বোতাম তৈরি করতে পারি ...

import UIKit

class ViewController: UIViewController
{  
private let firstbutton:UIButton = UIButton()

override func viewDidLoad() {
    super.viewDidLoad()
    self.firstbutton = UIButton.buttonWithType(UIButtonType.Custom) as? UIButton
    self.firstbutton!.frame = CGRectMake(100, 200, 100, 100)
    self.firstbutton!.backgroundColor = UIColor.redColor()
    self.firstbutton!.setTitle("My Button", forState: UIControlState.Normal)
    self.firstbutton!.addTarget(self, action:#selector(self.firstButtonClicked), forControlEvents: .TouchUpInside)
    self.view.addSubview(firstbutton!)
    }

func firstButtonClicked(){
   print("First Button Clicked")
}

নির্বাচক ফাংশনের জন্য @objc ছাড়া এটি গ্রহণ করছে না।
প্রদুম্মা পাতিল

0

উদ্দেশ্য-সি এ এটি ব্যবহার করে

UIButton *testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[testButton setTitle:@"Go to here" forState:UIControlStateNormal];
testButton.frame = CGRectMake(20, 20, 150, 150);    
[self.view addSubview:testButton];

সর্বশেষ সুইফটে এটি ব্যবহার করা

let testButton   = UIButton(type: UIButtonType.system) as UIButton
testButton.frame = CGRectMake(160, 160, 80, 20)
testButton.backgroundColor = UIColor.green
testButton.setTitle("Button testing:- ", forState: UIControlState.normal)
self.view.addSubview(testButton)

0

আপনি যদি মূল স্টোরিবোর্ড অংশে যান এবং নীচে ডানদিকে একটি বর্গক্ষেত্রের বৃত্তে যান এবং একটি ফাঁকা বোতাম ব্যবহার করেন। তারপরে কোডটিতে এটিটি ওয়্যার্ড করার জন্য এটির সাথে @ আইবিএ ব্যবহার করুন Then তারপরে আপনি এটির সাথে একটি @ আইবিএ ফাংশন করতে পারেন।


0

সুইফট 4.2 - এক্সকোড 10.1

একটি বন্ধ ব্যবহার করে

let button: UIButton = {
  let button = UIButton(type: .system)
  button.titleLabel?.font = UIFont.systemFont(ofSize: 20)
  ...
  return button
}()

0

ইন আইওএস 12, সুইফট 4.2 & উপর XCode 10.1

//For system type button
let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 250, width: 100, height: 50)
//        button.backgroundColor = .blue
button.setTitle("Button", for: .normal)
button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 13.0)
button.titleLabel?.textAlignment = .center//Text alighment center
button.titleLabel?.numberOfLines = 0//To display multiple lines in UIButton
button.titleLabel?.lineBreakMode = .byWordWrapping//By word wrapping
button.tag = 1//To assign tag value
button.btnProperties()//Call UIButton properties from extension function
button.addTarget(self, action:#selector(self.buttonClicked), for: .touchUpInside)
self.view.addSubview(button)

//For custom type button (add image to your button)
let button2 = UIButton(type: .custom)
button2.frame = CGRect(x: 100, y: 400, width: 100, height: 50)
//        button2.backgroundColor = .blue
button2.setImage(UIImage.init(named: "img.png"), for: .normal)
button2.tag = 2
button2.btnProperties()//Call UIButton properties from extension function
button2.addTarget(self, action:#selector(self.buttonClicked), for: .touchUpInside)
self.view.addSubview(button2)

@objc func buttonClicked(sender:UIButton) {
    print("Button \(sender.tag) clicked")
}

//You can add UIButton properties like this also
extension UIButton {
    func btnProperties() {
        layer.cornerRadius = 10//Set button corner radious
        clipsToBounds = true
        backgroundColor = .blue//Set background colour
        //titleLabel?.textAlignment = .center//add properties like this
    }
}

0

সুইফ্ট 5.0

        let button = self.makeButton(title: "Login", titleColor: .blue, font: UIFont.init(name: "Arial", size: 18.0), background: .white, cornerRadius: 3.0, borderWidth: 2, borderColor: .black)
        view.addSubview(button)
        // Adding Constraints
        button.heightAnchor.constraint(equalToConstant: 40).isActive = true
        button.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 40).isActive = true
        button.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -40).isActive = true
        button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -400).isActive = true
        button.addTarget(self, action: #selector(pressed(_ :)), for: .touchUpInside)

       // Define commmon method
        func makeButton(title: String? = nil,
                           titleColor: UIColor = .black,
                           font: UIFont? = nil,
                           background: UIColor = .clear,
                           cornerRadius: CGFloat = 0,
                           borderWidth: CGFloat = 0,
                           borderColor: UIColor = .clear) -> UIButton {
        let button = UIButton()
        button.translatesAutoresizingMaskIntoConstraints = false
        button.setTitle(title, for: .normal)
        button.backgroundColor = background
        button.setTitleColor(titleColor, for: .normal)
        button.titleLabel?.font = font
        button.layer.cornerRadius = 6.0
        button.layer.borderWidth = 2
        button.layer.borderColor = UIColor.red.cgColor
        return button
      }
        // Button Action
         @objc func pressed(_ sender: UIButton) {
                print("Pressed")
          }

এখানে চিত্র বর্ণনা লিখুন

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