Haga un UIButton mediante progtwigción en Swift

Estoy tratando de construir la interfaz de usuario programáticamente. ¿Cómo hago para que esta acción funcione? Estoy desarrollando con Swift.

Código en viewDidLoad:

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

Solo le faltan los dos puntos al final del nombre del selector. Como presionado toma un parámetro, los dos puntos deben estar allí. Además, su función presionada no debe anidarse dentro de viewDidLoad.

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

EDITAR: Actualizado para reflejar las mejores prácticas en Swift 2.2. #selector () se debe usar en lugar de una cadena literal que está en desuso.

Swift 2.2 Xcode 7.3

Dado que Objective-C String Literals están en desuso ahora para los métodos de callback de botón

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

Swift 3 Xcode 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") } 

Swift 4 Xcode 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") } 

Swift 4

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

Sí en el simulador. Algunas veces no reconocerá el selector, parece que hay un error. Incluso no me enfrenté a su código, entonces simplemente cambié el nombre de la acción (selector). Funciona

 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) 

Una función de selector de ejemplo está aquí:

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

Swift 3

 //Create button 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) func buttonTapped(sender : UIButton) { //Write button action here } 

Debería poder crear un botón de IU personalizada mediante progtwigción accediendo a la propiedad titleLabel de UIButton .

Por referencia de clase en Swift: en cuanto a la propiedad titleLabel , dice que “aunque esta propiedad es de solo lectura, sus propias propiedades son de lectura / escritura. Use estas propiedades principalmente para configurar el texto del botón”.

En Swift , puede modificar directamente las propiedades de titleLabel como estas:

 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) 

Editar

Sintaxis de Swift 3.1

prueba estos … espero que ayude …

 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 } 

estos son botones, haga clic en evento …

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

Swift 3: puede crear un UIButton programáticamente

ya sea dentro de un scope de métodos, por ejemplo, en ViewDidLoad() Asegúrese de agregar restricciones al botón; de lo contrario, no lo verá

 let button = UIButton() button.translatesAutoresizingMaskIntoConstraints = false button.target(forAction: #selector(buttonAction), withSender: self) //button.backgroundColor etc view.addSubview(button) func buttonAction() { //some Action } 

o fuera de su scope como variable global para acceder desde cualquier lugar en su module

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

y luego configuras las restricciones

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

Swift: Ui Button crea programáticamente

 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 

Swift: Ui Button crea programáticamente,

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

Para Swift 3 Xcode 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 } 

Swift “Button Factory” extensión para UIButton (y mientras estamos en ello) también para UILabel como así:

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

Probado en Swift en Xcode versión 9.2 (9C40b) Swift 4.x

UIButton con restricciones en 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!") } 

El botón está anclado a la esquina inferior izquierda, arriba de la barra de tabs.

En Swift podemos crear un botón programáticamente al escribir este código en nuestro archivo viewcontroller.swift …

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

Usando esto en Objective-C

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

Usando esto en Latest Swift

 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) 

Si va a la parte del guión gráfico principal, y en la esquina inferior derecha, vaya al círculo con un cuadrado y use un botón en blanco. Luego, en el código, use @IBAction con él para conectarlo. Luego, puede hacer una función @IBAction con él.