【发布时间】:2023-03-17 22:21:02
【问题描述】:
我正在尝试在给定初始值的情况下快速动态生成按钮,大小为 8 的数组将生成 8 个按钮。
但是,即使代码有效,每当我单击任何生成的按钮时,应用程序都会立即崩溃并显示错误代码“线程 1 信号 SIGABRT”,并且控制台显示“libc++abi.dylib:以未捕获的异常终止” NSException 类型”。
然后我被指向 AppDelegate.swift 中包含“class AppDelegate: UIResponder, UIApplicationDelegate {”的行。
我尝试了其他类似问题中的建议,但无济于事,请参见下面的代码
func generateButtons (){
var numberOfVillains = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
var buttonY: CGFloat = 126 // our Starting Offset, could be 0
for number in numberOfVillains {
let segmentController = UISegmentedControl()
//let villainButton = UISegmentedControl(frame: CGRect(x: 50, y: buttonY, width: 50, height: 30)){
buttonY = buttonY + 40 // we are going to space these UIButtons 50px apart
segmentController.frame = CGRect(x:160, y:buttonY, width: 100,height: 30)
//segment frame size
segmentController.insertSegment(withTitle: "Off", at: 0, animated: true)
//inserting new segment at index 0
segmentController.insertSegment(withTitle: "On", at: 1, animated: true)
//inserting new segment at index 1
segmentController.backgroundColor = UIColor.white
//setting the background color of the segment controller
segmentController.selectedSegmentIndex = 0
//setting the segment which is initially selected
segmentController.addTarget(self, action: Selector(("segment:")), for: UIControlEvents.valueChanged)
//calling the selector method
self.view.addSubview(segmentController)
//adding the view as subview of the segment comntroller w.r.t. main view controller
}
}
func buttonPressed(sender: UISegmentedControl!) {
print("ButtonIsSelected")
}
【问题讨论】:
-
旁注 - 我认为这里有一些风格可以改进您的代码。您将这些称为按钮,但它们不是。您的数组称为
numberOfVillains,这令人困惑,因为您希望它是一个数字而不是字符串数组。您的分段控件被命名为segmentController,而不是像segmentedControl这样稍微更正确/更清晰的名称。改进命名约定将提高代码的可读性和可维护性。如果您实际上并未在任何地方对其进行变异,您的数组也可以更改为let常量。
标签: ios swift swift3 uisegmentedcontrol sigabrt