我是swift的新手,并尝试以编程方式创建UIButton。我有两节课。我在一个类中创建一个按钮,并从另一个类调用该方法。
类视图控件
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let renderobj = render()
renderobj.sign()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
类呈现
import UIKit
class render: UIViewController {
func sign() {
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")
}
}
但是没有创建按钮。如果我将UIButton
代码放在viewDidLoad()
内,则可行。我希望按钮在不同类的功能中创建。有可能这样做吗?
感谢您的帮助
答案 0 :(得分:1)
完成此操作后
let renderobj = render()
调用此函数后,会初始化一个新按钮并将其添加到render
视图控制器的视图中。
renderobj.sign()
但renver
视图控制器仅被初始化,其视图未添加到当前视图控制器ViewController
如果您想显示render
控制器,请像往常一样展示它。如果要将该按钮添加到ViewController
,则要声明按钮变量并访问它,或者在sign()
函数中返回
答案 1 :(得分:1)
func sign() -> UIButton
{
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)
return button
}
返回该按钮后,您可以将其添加到主叫视图控制器视图中
override func viewDidLoad() {
super.viewDidLoad()
let renderobj = render()
let button = renderobj.sign()
self.view.addSubview(button)
}
答案 2 :(得分:1)
我认为这里对UIViewController
的概念缺乏了解。 UIViewController
用于管理向用户显示的视图,将其视为应用的单个屏幕。您可以在其他视图控制器中嵌入视图控制器,但通常您不需要为基本内容执行此操作。
UIViewController
有一个生命周期,您可以在此处找到更多信息:https://developer.apple.com/reference/uikit/uiviewcontroller#1652793
现在您想要做的就是完成创建按钮的功能,您可以通过在ViewController
类(或其他地方的其他类)中创建工厂方法来实现此目的,或者通过继承UIButton并创建一个方便的初始化方法来创建具有你想要的属性的按钮(你也可以使用Swift扩展,但我不会在这里进入)。
让我们看一下最简单的方法,并在ViewController
类中创建一个工厂方法:
// The button method takes a title and a selector (the selector is the method that should be called when the button is tapped)
func makeButton(title: String, action: Selector) -> UIButton {
// Create a basic button with a default size
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
// Customise the button with your settings
button.backgroundColor = .green
button.setTitle(title, for: .normal)
button.addTarget(self, action: action, for: .touchUpInside)
// Return the newly created button
return button
}
现在我们有一个方法可以创建一个默认大小和位置的按钮,我们想要调用该方法来创建一个按钮,然后将其添加为ViewController
视图的子视图。为此,我们可以在我们覆盖的viewDidLoad()
方法中执行某些操作:
override func viewDidLoad() {
// Always remember to call the super method to ensure all super classes have a chance to do any work thats required by them
super.viewDidLoad()
// Create the button by calling our new method
let button = self.makeButton(title: "Test Button", action: #selector(buttonTapped))
// Set the origin of the button to move it to the right position
button.frame.origin = CGPoint(x: 100, y: 100)
// Finally add the new button as a subclass of the view controllers view
self.view.addSubview(button)
}
现在我们了解在方法中发生的事情,我们可以将它们放在一起,形成一个如下所示的类:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = self.makeButton(title: "Test Button", action: #selector(buttonTapped))
button.frame.origin = CGPoint(x: 100, y: 100)
self.view.addSubview(button)
}
func makeButton(title: String, action: Selector) -> UIButton {
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle(title, for: .normal)
button.addTarget(self, action: action, for: .touchUpInside)
return button
}
func buttonTapped(sender: UIButton) {
print("Button tapped")
}
}
答案 3 :(得分:0)
您在此处创建新的UIViewController
:
let renderobj = render()
renderobj.sign()
但ViewController
实例正在显示。