J'essaie de construire une interface utilisateur par programme. Comment faire pour que cette action fonctionne? Je développe avec Swift.
Code in 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();
}
Il vous manque juste les deux points à la fin du nom du sélecteur. Puisque pressé prend un paramètre, les deux points doivent être là. De plus, votre fonction pressée ne doit pas être imbriquée dans 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()
}
EDIT: mis à jour pour refléter les meilleures pratiques en Swift 2.2. #selector () devrait être utilisé plutôt qu'une chaîne littérale qui est déconseillée.
Swift 2.2 Xcode 7.
Depuis Objective-C String, les littéraux sont obsolètes pour les méthodes de rappel de bouton
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?) {
}
Swift 3/4
// bouton Créer
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
}
Oui en simulateur. Parfois, il ne reconnaît pas le sélecteur, il semble y avoir un bogue. Même si je ne faisais pas face à votre code, alors je viens de changer le nom de l'action (sélecteur). Ça marche
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)
Un exemple de fonction de sélecteur est ici:
func buttonAction(sender:UIButton!) {
var btnsendtag:UIButton = sender
if btnsendtag.tag == 22 {
//println("Button tapped tag 22")
}
}
Vous devriez pouvoir créer un bouton de personnalisation de l'interface utilisateur par programme en accédant à la propriété titleLabel de IButton.
Per Référence de la classe dans Swift: En ce qui concerne la propriété titleLabel, elle indique que "bien que cette propriété soit en lecture seule, ses propres propriétés sont en lecture/écriture. Utilisez ces propriétés principalement pour configurer le texte du bouton. "
Dans Swift , vous pouvez directement modifier les propriétés de titleLabel comme ceci:
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)
Modifier
Syntaxe de Swift 3.1
essayez ces .. j'espère que cela aide ...
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
}
ce sont des boutons clic événement ..
func btnclicked(sender: UIButton!)
{
//write the task you want to perform on buttons click event..
}
Swift 3: Vous pouvez créer un UIButton
par programme
soit dans une portée de méthodes, par exemple dans ViewDidLoad()
, veillez à bien ajouter des contraintes au bouton, sinon vous ne le verrez pas.
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.target(forAction: #selector(buttonAction), withSender: self)
//button.backgroundColor etc
view.addSubview(button)
func buttonAction() {
//some Action
}
ou en dehors de votre portée en tant que variable globale pour y accéder de n’importe où dans votre module
let button: UIButton = {
let b = UIButton()
b.translatesAutoresizingMaskIntoConstraints = false
//b.backgroundColor etc
return b
}()
et puis vous configurez les contraintes
func setupButtonView() {
view.addSubview(button)
button.widthAnchor.constraint(equalToConstant: 40).isActive = true
button.heightAnchor.constraint(equalToConstant: 40).isActive = true
// etc
}
Swift: Uibutton créer par programme,
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)")
}
Pour 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" extension pour UIButton (et tant que nous y sommes) également pour UILabel comme ceci:
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
}
}
Testé dans Swift dans Xcode version 9.2 (9C40b) Swift 4.x
Swift: Ui Button créer par programme
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
Dans Swift Nous pouvons créer un bouton par programme en écrivant ce code dans notre fichier 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")
}
UIButton avec des contraintes dans 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!")
}
Le bouton est ancré dans le coin inférieur gauche, au-dessus de la barre d’onglet.
En utilisant une fermeture
let button: UIButton = {
let button = UIButton(type: .system)
button.titleLabel?.font = UIFont.systemFont(ofSize: 20)
...
return button
}()
tilisation de cela 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];
tilisation de cela dans 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 vous allez dans la partie principale du storyboard, et en bas à droite, allez au cercle avec un carré et utilisez un bouton vierge. Ensuite, dans le code, utilisez @IBAction pour le connecter. Vous pouvez ensuite créer une fonction @IBAction.
Dans iOS 12, Swift 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
}
}