我如何以编程方式创建图形元素(如UIButton)在Swift?我试图创建和添加按钮到一个视图,但不能。
当前回答
这是可能的。除了使用swift语法之外,您几乎可以以相同的方式完成所有操作。例如,你可以用这样的代码创建一个UIButton:
var button: UIButton = UIButton(frame: CGRectMake(0, 0, 100, 100))
其他回答
这对我来说非常好,#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")
}
在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)
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")
}
下面是一个完整的解决方案,以编程方式添加一个UIButton与targetAction。 斯威夫特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,上述方法仍然有效。
你可以这样创建,也可以这样添加动作....
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")
}
推荐文章
- 更改UITextField和UITextView光标/插入符颜色
- 如何使用@Binding变量实现自定义初始化
- 'Project Name'是通过优化编译的——步进可能会表现得很奇怪;变量可能不可用
- Swift设置为Array
- 如何设置回退按钮文本在Swift
- 我如何能在Swift扩展类型化数组?
- Swift类错误:属性未在super处初始化。init调用
- 模拟器慢动作动画现在打开了吗?
- 如何为TableView创建NSIndexPath
- 滑动删除和“更多”按钮(就像iOS 7的邮件应用程序)
- 使UINavigationBar透明
- 如何改变推和弹出动画在一个基于导航的应用程序
- 删除/重置核心数据中的所有条目?
- Swift to Objective-C头未在Xcode 6中创建
- setNeedsLayout vs. setNeedsUpdateConstraints和layoutIfNeeded vs. updateConstraintsIfNeeded