如何在Swift中以编程方式创建图形元素(如UIButton
)?我尝试在视图中创建并添加按钮,但无法进行。
答案 0 :(得分:388)
以下是使用 targetAction 以编程方式添加UIButton
的完整解决方案。
Swift 2.2
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = .greenColor()
button.setTitle("Test Button", forState: .Normal)
button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)
self.view.addSubview(button)
}
func buttonAction(sender: UIButton!) {
print("Button tapped")
}
最好使用NSLayoutConstraint
而不是frame
为每个iPhone屏幕正确放置按钮。
更新了代码 Swift 3.1 :
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle("Test Button", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
}
func buttonAction(sender: UIButton!) {
print("Button tapped")
}
将代码更新为 Swift 4.2 :
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle("Test Button", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
}
@objc func buttonAction(sender: UIButton!) {
print("Button tapped")
}
如果func buttonAction
声明为private
或internal
,则上述操作仍然有效。
答案 1 :(得分:99)
您可以通过这种方式以编程方式添加UIButton,UIlable和UITextfield。
UIButton代码
// var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
let button = UIButton(type: .System) // let preferred over var here
button.frame = CGRectMake(100, 100, 100, 50)
button.backgroundColor = UIColor.greenColor()
button.setTitle("Button", forState: UIControlState.Normal)
button.addTarget(self, action: "Action:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
UILabel代码
var label: UILabel = UILabel()
label.frame = CGRectMake(50, 50, 200, 21)
label.backgroundColor = UIColor.blackColor()
label.textColor = UIColor.whiteColor()
label.textAlignment = NSTextAlignment.Center
label.text = "test label"
self.view.addSubview(label)
UITextField代码
var txtField: UITextField = UITextField()
txtField.frame = CGRectMake(50, 70, 200, 30)
txtField.backgroundColor = UIColor.grayColor()
self.view.addSubview(txtField)
希望这对你有所帮助。
答案 2 :(得分:58)
适用于Swift 3
let button = UIButton()
button.frame = CGRect(x: self.view.frame.size.width - 60, y: 60, width: 50, height: 50)
button.backgroundColor = UIColor.red
button.setTitle("your Button Name", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
func buttonAction(sender: UIButton!) {
print("Button tapped")
}
适用于Swift 4
let button = UIButton()
button.frame = CGRect(x: self.view.frame.size.width - 60, y: 60, width: 50, height: 50)
button.backgroundColor = UIColor.red
button.setTitle("Name your Button ", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
@objc func buttonAction(sender: UIButton!) {
print("Button tapped")
}
答案 3 :(得分:30)
Swift 3
let btn = UIButton(type: .custom) as UIButton
btn.backgroundColor = .blue
btn.setTitle("Button", for: .normal)
btn.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
btn.addTarget(self, action: #selector(clickMe), for: .touchUpInside)
self.view.addSubview(btn)
func clickMe(sender:UIButton!) {
print("Button Clicked")
}
输出
答案 4 :(得分:17)
如何使用 Swift 3.0 执行此操作。
func createButton() {
let button = UIButton(type: .system)
button.frame = CGRect(x: 100.0, y: 100.0, width: 100.0, height: 100.0)
button.setTitle(NSLocalizedString("Button", comment: "Button"), for: .normal)
button.backgroundColor = .green
button.addTarget(self, action: #selector(buttonAction(sender:)), for: .touchUpInside)
view.addSubview(button)
}
@objc func buttonAction(sender: UIButton) {
print("Button pushed")
}
答案 5 :(得分:15)
var sampleButton:UIButton?
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
sampleButton = UIButton(type: .RoundedRect)
//sampleButton.frame = CGRect(x:50, y:500, width:70, height:50)
sampleButton!.setTitle("Sample \n UI Button", forState: .Normal)
sampleButton!.titleLabel?.lineBreakMode = .ByWordWrapping
sampleButton!.titleLabel?.textAlignment = .Center
sampleButton!.setTitleColor(UIColor.whiteColor(), forState: .Normal)
sampleButton!.layer.cornerRadius = 6
sampleButton!.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.6)
sampleButton?.tintColor = UIColor.brownColor()
//Add padding around text
sampleButton!.titleEdgeInsets = UIEdgeInsetsMake(-10,-10,-10,-10)
sampleButton!.contentEdgeInsets = UIEdgeInsetsMake(5,5,5,5)
//Action set up
sampleButton!.addTarget(self, action: "sampleButtonClicked", forControlEvents: .TouchUpInside)
self.view.addSubview(sampleButton!)
//Button Constraints:
sampleButton!.translatesAutoresizingMaskIntoConstraints = false
//To anchor above the tab bar on the bottom of the screen:
let bottomButtonConstraint = sampleButton!.bottomAnchor.constraintEqualToAnchor(bottomLayoutGuide.topAnchor, constant: -20)
//edge of the screen in InterfaceBuilder:
let margins = view.layoutMarginsGuide
let leadingButtonConstraint = sampleButton!.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor)
bottomButtonConstraint.active = true
leadingButtonConstraint.active = true
}
func sampleButtonClicked(){
print("sample Button Clicked")
}
答案 6 :(得分:14)
API没有改变 - 只有语法有。您可以制作UIButton
并将其添加为:
var button = UIButton(frame: CGRectMake(0, 0, 50, 50))
self.view.addSubview(button) // assuming you're in a view controller
答案 7 :(得分:6)
在viewDidLoad中添加此代码 //添加按钮
var button=UIButton(frame: CGRectMake(150, 240, 75, 30))
button.setTitle("Next", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonTapAction:", forControlEvents: UIControlEvents.TouchUpInside)
button.backgroundColor = UIColor.greenColor()
self.view.addSubview(button)
在此处写下此功能,当您点击按钮
时会调用此功能func buttonTapAction(sender:UIButton!)
{
println("Button is working")
}
答案 8 :(得分:6)
在Swift 2和iOS 9.2.1中
var button: UIButton = UIButton(type: UIButtonType.Custom) as UIButton
self.button.frame = CGRectMake(130, 70, 60, 20)
self.button.setTitle("custom button", forState: UIControlState.Normal)
self.button.addTarget(self, action:"buttonActionFuncName", forControlEvents: UIControlEvents.TouchUpInside)
self.button.setTitleColor(UIColor.blackColor(), forState: .Normal)
self.button.layer.borderColor = UIColor.blackColor().CGColor
self.button.titleLabel?.font = UIFont(name: "Helvetica-Bold", size: 13)
self.view.addSubview(self.button)
答案 9 :(得分:6)
您可以像这样创建,也可以像这样添加动作....
import UIKit
let myButton = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
{ super.init(nibName: nibName, bundle: nibBundle)
myButton.targetForAction("tappedButton:", withSender: self)
}
func tappedButton(sender: UIButton!)
{
println("tapped button")
}
答案 10 :(得分:4)
有可能。除了使用swift语法之外,你几乎以同样的方式做所有事情。例如,你可以在这样的代码中创建一个UIButton:
var button: UIButton = UIButton(frame: CGRectMake(0, 0, 100, 100))
答案 11 :(得分:3)
let myFirstButton = UIButton()
myFirstButton.setTitle("Software Button", forState: .Normal)
myFirstButton.setTitleColor(UIColor.redColor(), forState: .Normal)
myFirstButton.frame = CGRectMake(100, 300, 150, 50)
myFirstButton.backgroundColor = UIColor.purpleColor()
myFirstButton.layer.cornerRadius = 14
myFirstButton.addTarget(self, action: "pressed:", forControlEvents: .TouchUpInside)
self.view.addSubview(myFirstButton)
myFirstButton.hidden=true
nameText.delegate = self
func pressed(sender: UIButton!) {
var alertView = UIAlertView()
alertView.addButtonWithTitle("Ok")
alertView.title = "title"
alertView.message = "message"
alertView.show();
}
答案 12 :(得分:3)
是的,在模拟器中。有时它不会识别选择器,看起来有一个错误。即使我不面对你的代码,我只是改变了动作名称(选择器)。它的工作原理
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")
}
}
答案 13 :(得分:3)
从故事板创建UIButton: 1 - 将UIButton对象从对象库拖到storyboard文件中的ViewController 2 - 显示助理编辑器 3 - 从UIButton创建上方右键拖动到您的班级。结果如下:
@IBAction func buttonActionFromStoryboard(sender: UIButton)
{
println("Button Action From Storyboard")
}
以编程方式创建UIButton: 1-写入“覆盖func viewDidLoad()”:
let uiButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
uiButton.frame = CGRectMake(16, 116, 288, 30)
uiButton.setTitle("Second", forState: UIControlState.Normal);
uiButton.addTarget(self, action: "buttonActionFromCode:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(uiButton)
2-添加IBAction功能:
@IBAction func buttonActionFromCode(sender:UIButton)
{
println("Button Action From Code")
}
答案 14 :(得分:2)
对于Swift 5与Swift 4相同
let button = UIButton()
button.frame = CGRect(x: self.view.frame.size.width - 60, y: 60, width: 50, height: 50)
button.backgroundColor = UIColor.red
button.setTitle("Name your Button ", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
@objc func buttonAction(sender: UIButton!) {
print("Button tapped")
}
答案 15 :(得分:2)
在Swift 4.2中编写此示例代码,以编程方式添加Button。
override func viewDidLoad() {
super.viewDidLoad()
let myButton = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
myButton.backgroundColor = .green
myButton.setTitle("Hello UIButton", for: .normal)
myButton.addTarget(self, action: #selector(myButtonAction), for: .touchUpInside)
self.view.addSubview(myButton)
}
@objc func myButtonAction(sender: UIButton!) {
print("My Button tapped")
}
答案 16 :(得分:2)
这对我很有用,#DynamicButtonEvent #IOS #Swift #Xcode
func setupButtonMap(){
let mapButton = UIButton(type: .system)
mapButton.setImage(#imageLiteral(resourceName: "CreateTrip").withRenderingMode(.alwaysOriginal), for: .normal)
mapButton.frame = CGRect(x: 0, y: 0, width: 34, height: 34)
mapButton.contentMode = .scaleAspectFit
mapButton.backgroundColor = UIColor.clear
mapButton.addTarget(self, action: #selector(ViewController.btnOpenMap(_:)), for: .touchUpInside)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: mapButton)
}
@IBAction func btnOpenMap(_ sender: Any?) {
print("Successful")
}
答案 17 :(得分:1)
// UILabel:
let label = UILabel()
label.frame = CGRectMake(35, 100, 250, 30)
label.textColor = UIColor.blackColor()
label.textAlignment = NSTextAlignment.Center
label.text = "Hello World"
self.view.addSubview(label)
// UIButton:
let btn: UIButton = UIButton(type: UIButtonType.Custom) as UIButton
btn.frame = CGRectMake(130, 70, 60, 20)
btn.setTitle("Click", forState: UIControlState.Normal)
btn.setTitleColor(UIColor.blackColor(), forState: .Normal)
btn.addTarget(self, action:Selector("clickAction"), forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(btn)
// Button Action:
@IBAction func clickAction(sender:AnyObject)
{
print("Click Action")
}
答案 18 :(得分:0)
第1步:制作新项目
第2步:在ViewController.swift
中import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// CODE
let btn = UIButton(type: UIButtonType.System) as UIButton
btn.backgroundColor = UIColor.blueColor()
btn.setTitle("CALL TPT AGENT", forState: UIControlState.Normal)
btn.frame = CGRectMake(100, 100, 200, 100)
btn.addTarget(self, action: "clickMe:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(btn)
}
func clickMe(sender:UIButton!) {
print("CALL")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 19 :(得分:0)
func viewDidLoad(){
saveActionButton = UIButton(frame: CGRect(x: self.view.frame.size.width - 60, y: 0, width: 50, height: 50))
self.saveActionButton.backgroundColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 0.7)
saveActionButton.addTarget(self, action: #selector(doneAction), for: .touchUpInside)
self.saveActionButton.setTitle("Done", for: .normal)
self.saveActionButton.layer.cornerRadius = self.saveActionButton.frame.size.width / 2
self.saveActionButton.layer.borderColor = UIColor.darkGray.cgColor
self.saveActionButton.layer.borderWidth = 1
self.saveActionButton.center.y = self.view.frame.size.height - 80
self.view.addSubview(saveActionButton)
}
func doneAction(){
print("Write your own logic")
}
答案 20 :(得分:0)
Swift:Ui Button以编程方式创建
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
self.view.addSubview(myButton)
答案 21 :(得分:0)
我通常会去设置UIBotton的扩展。雨燕5。
let button: UIButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
button.setup(title: "OK", x: 100, y: 430, width: 220, height: 80, color: .yellow)
buttonD.setTitleColor(.black, for: .normal)
}
extension UIButton {
func setup(title: String, x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, color: UIColor){
frame = CGRect(x: x, y: y, width: width, height: height)
backgroundColor = color
setTitle(title , for: .normal)
}
}
答案 22 :(得分:-1)
Uilabel code
var label: UILabel = UILabel()
label.frame = CGRectMake(50, 50, 200, 21)
label.backgroundColor = UIColor.blackColor()
label.textColor = UIColor.whiteColor()
label.textAlignment = NSTextAlignment.Center
label.text = "test label"
self.view.addSubview(label)
答案 23 :(得分:-2)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var imageView = UIImageView(frame: CGRectMake(100, 150, 150, 150));
var image = UIImage(named: "BattleMapSplashScreen.png");
imageView.image = image;
self.view.addSubview(imageView);
}