ios - 将 UIButtons 添加到 ViewDidLoad 上的数组
问题描述
我正在处理一个示例项目。
我正在尝试计算 ViewControllers 视图具有的 UIButtons 的数量,然后将它们添加到数组中,以便我可以以编程方式访问它们,即更改颜色/标题等。
import UIKit
class ViewController: UIViewController
{
var cardButtons: [UIButton]!
let cardForegroundColour = UIColor.white
let cardBackgroundColour = UIColor.orange
lazy var game = ConcentrationGame(numberOfPairsOfCards: (self.cardButtons.count + 1) / 2)
override func viewDidLoad()
{
for case let button as UIButton in self.view.subviews
{
button.backgroundColor = cardForegroundColour
self.cardButtons.append(button)
}
print ("number of buttons /(self.cardButtons.count)")
}
因此,它构建得很好,但在附加行上崩溃了:
线程 1:致命错误:在展开可选值时意外发现 nil
现在,如果我设置断点,则该button
对象是有效对象。
我可以很好地更改所有颜色,但我无法将它们添加到cardButtons
.
我知道我可以设置cardButtons
为 Collection Outlet,并手动连接它们,但我希望能够更改 UI 并且代码只是适应,因此添加更多按钮或删除一些按钮不会更改代码或需要手动重新布线。
我意识到问题在于我对选项的理解,但我认为!
一开始和具体对象button
是正确的方法。
解决方案
问题cardButtons
是nil
。
将此行更改var cardButtons: [UIButton]!
为var cardButtons = [UIButton]()
推荐阅读
- spring-boot - 为 REST API 实现 SpringBoot Security JWT 时向标头添加参数不起作用
- blazor - 的使用
Blazor razor 文件中的标签 - javascript - io.emit() 不向所有客户端发送数据
- xml - 如果我们比较 xml 和 yaml,哪个更灵活?
- java - .java 和 .xml 文件替换为一些随机代码
- sql - 重复 ID 问题
- node.js - Nodejs Express服务器找不到模块'pdf-fill-form'
- javascript - Angular 单元测试,“你需要包含一些实现 __karma__.start 方法的适配器!”
- unity3d - 我的播放器的跳跃和移动代码只能间歇性地工作
- apache - Xampp x64-7.4.3-0-VC15 Apache 意外关闭