【发布时间】:2018-12-24 18:10:03
【问题描述】:
我正在开发一个包含一大堆按钮的应用程序,这些按钮的格式完全相同——大小、布局、颜色、文本标签等。类似于它与“原型”单元格的工作方式表视图和容器视图,我正在尝试在外部 xib 中创建“原型”按钮的一个实例作为 UIButton 的自定义类,我可以将其拉入主视图控制器并根据需要重复。
我在输入按钮时没有遇到任何问题,在自定义文本标签等方面也没有遇到任何问题。所以这并不像是“原型”没有正确输出的问题。
实际的按钮点击似乎不起作用。
我有两个按钮——button1 和 button2,它们被分配了 tag=1 和 tag=2。为了测试按钮操作,我设置了一个打印语句,将发送者的标签号打印到控制台。
如果我在主情节提要中创建一个简单、普通的按钮,并给它一个标签号,则该按钮的行为正确。但是自定义类按钮不会向控制台发送任何内容。
我错过了一步吗?我的直觉是,我缺少的外部 xib 中有一个额外的细节......但我认为细节(标签号等)需要与每个实例相关联,而不是与原型相关联。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button1: customButton!
@IBOutlet weak var button2: customButton!
override func viewDidLoad() {
super.viewDidLoad()
button1.customTitle.text = "This is Button 1"
button2.customTitle.text = "This is Button 2"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func buttonPressed(_ sender: UIButton) {
print(sender.tag)
}
}
编辑:这里是生成按钮的 xib 中的代码。
import UIKit
class customButton: UIButton {
@IBOutlet var contentView: UIView!
@IBAction func buttonPressed(_ sender: UIButton) {
}
override init(frame: CGRect) { // for using CustomView in code
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) { // for using CustomView in IB
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("customButton", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
【问题讨论】:
-
如何将按钮操作链接到
notePressed? -
在与自定义 .xib 关联的 .swift 文件中,我有一个从按钮到此代码的出口:@IBAction func notePressed(_ sender: UIButton) { ...
-
您能否将建立连接的代码添加到您的问题中?
-
完成。希望能对事情有所启发。
-
所以,
customButton类中有一个空的buttonPressed函数。如果这是您的按钮操作,那么没有调用视图控制器功能是有道理的。 (尝试从customButton操作打印一些内容,看看会发生什么。)