无法在从 nib 文件加载的视图中更改按钮的属性
Can't change attributes of button in view loaded from nib file
我正在加载我在界面生成器中创建的视图,如下所示:
let contentView = Bundle.main.loadNibnamed("ContentView", owner: nil, options: nil)?.first as! ContentView
该视图包含一个 UIImageView 和一个 UIButton。它们都通过 IBOutlets 连接到 ContentView class 文件。
现在,当我加载视图时,我正在设置 UIImageView 的图像,效果很好。我也在尝试更改 UIButton 的文本和背景颜色,但两者都不会改变。有趣的是,该按钮并没有保留我在界面构建器中设置的颜色,而是保留了文本。
我用来更改文本和颜色的代码:
contentView.contentButton.backgroundColor = .red
contentView.contentButton.titleLabel?.text = "someText"
感谢您的帮助。
ContentView.swift
class ContentView: UIView {
@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var contentImageView: UIImageView!
@IBOutlet weak var contentButton: UIButton!
}
我用来创建视图的代码:
ContentScrollViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<imageArray.count {
let xPosition = Int(self.view.frame.width) * i
let contentView: ContentView = Bundle.main.loadNibNamed("ContentView", owner: nil, options: nil)?.first as! ContentView
contentView.frame.origin = CGPoint(x: xPosition, y: -Int((self.navigationController?.navigationBar.frame.height)!))
contentView.mainImageView.contentMode = .scaleAspectFill
contentView.contentImageView.image = #imageLiteral(resourceName: "stoerer_png_neu")
//Not working
contentView.specialButton.backgroundColor = .red
if let url = URL(string: imageArray[i]) {
contentView.mainImageView.af_setImage(withURL: url)
}
mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
mainScrollView.addSubview(contentView)
}
}
你必须使用
contentView.contentButton.setTitle("someText", for: .normal)
和
contentView.contentButton.setTitleColor(.red, for: .normal)
因为您需要为特定的 UIControlState 设置这些属性
背景需要使用图层:
contentView.contentButton.layer.backgroundColor = UIColor.red.cgColor
重新启动与问题相关的所有文件后,我终于找到了问题所在。 .xib 中 UIButton 的约束不知何故导致了这个问题。因此,如果您遇到同样的情况,请检查您的限制条件。 :]
我正在加载我在界面生成器中创建的视图,如下所示:
let contentView = Bundle.main.loadNibnamed("ContentView", owner: nil, options: nil)?.first as! ContentView
该视图包含一个 UIImageView 和一个 UIButton。它们都通过 IBOutlets 连接到 ContentView class 文件。
现在,当我加载视图时,我正在设置 UIImageView 的图像,效果很好。我也在尝试更改 UIButton 的文本和背景颜色,但两者都不会改变。有趣的是,该按钮并没有保留我在界面构建器中设置的颜色,而是保留了文本。
我用来更改文本和颜色的代码:
contentView.contentButton.backgroundColor = .red
contentView.contentButton.titleLabel?.text = "someText"
感谢您的帮助。
ContentView.swift
class ContentView: UIView {
@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var contentImageView: UIImageView!
@IBOutlet weak var contentButton: UIButton!
}
我用来创建视图的代码:
ContentScrollViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<imageArray.count {
let xPosition = Int(self.view.frame.width) * i
let contentView: ContentView = Bundle.main.loadNibNamed("ContentView", owner: nil, options: nil)?.first as! ContentView
contentView.frame.origin = CGPoint(x: xPosition, y: -Int((self.navigationController?.navigationBar.frame.height)!))
contentView.mainImageView.contentMode = .scaleAspectFill
contentView.contentImageView.image = #imageLiteral(resourceName: "stoerer_png_neu")
//Not working
contentView.specialButton.backgroundColor = .red
if let url = URL(string: imageArray[i]) {
contentView.mainImageView.af_setImage(withURL: url)
}
mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
mainScrollView.addSubview(contentView)
}
}
你必须使用
contentView.contentButton.setTitle("someText", for: .normal)
和
contentView.contentButton.setTitleColor(.red, for: .normal)
因为您需要为特定的 UIControlState 设置这些属性
背景需要使用图层:
contentView.contentButton.layer.backgroundColor = UIColor.red.cgColor
重新启动与问题相关的所有文件后,我终于找到了问题所在。 .xib 中 UIButton 的约束不知何故导致了这个问题。因此,如果您遇到同样的情况,请检查您的限制条件。 :]