gpt4 book ai didi

ios - 在 Swift 中动态创建自定义按钮的实例

转载 作者:行者123 更新时间:2023-11-28 10:21:12 24 4
gpt4 key购买 nike

我创建了一个自定义按钮类,如下所示。

import UIKit

class LogButtonView: UIButton {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

self.frame = CGRectMake(200, 200, 100, 100)

self.layer.cornerRadius = 50
self.layer.borderWidth = 1
self.layer.borderColor = self.tintColor.CGColor
}

}

而且我知道如何在 Storyboard中使用它。

但是如何在 ViewController.swift 中动态创建它的实例并将其添加到 containerView 中?

import UIKit

class ViewController: UIViewController {
@IBOutlet var containerView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

let logBtn = LogButtonView() // Missing argument for parameter 'coder' in call
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

如果可能的话,我希望所有 LogButtonView 实例都具有相同的大小,所以我设置了 self.frame = CGRectMake(200, 200, 100, 100) .但是 Storyboard中的实例似乎是我将它们拖动到的大小。

最佳答案

要在代码中创建 View ,请不要使用 init(coder:),而应使用 init(frame:)。并且不要忘记在创建后将其添加到 View 层次结构中

class LogButtonView: UIButton {
init() {
super.init(frame: CGRectMake(200, 200, 100, 100))
//other stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

//viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let logBtn = LogButtonView()
self.view.addSubview(logBtn)
}

但我认为你不想在 View 的初始化中设置框架,因为这意味着每个 LogButtonView 都将处于相同的位置。更好的方法是:

class LogButtonView: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
//other stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

//viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let logBtn = LogButtonView(frame: CGRectMake(200, 200, 100, 100))
self.view.addSubview(logBtn)
}

关于ios - 在 Swift 中动态创建自定义按钮的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com