【发布时间】:2022-01-14 10:21:58
【问题描述】:
例如,我们有分段控件和按钮数组。如果我们在一个片段中选择一个按钮 - 按钮需要保存状态,然后我们移动到另一个片段并选择另一个按钮。但是如果我们回到上一个按钮 - 它应该在我们之前选择的位置。 也就是说,每个段都必须存储按钮的状态。 如何做得更好?
struct SegmentsModel {
let title: String
var answered: Bool
var buttonIndex: Int? = nil
}
@objc private func buttonsTapped(_ sender: UIButton) {
let _ = buttons.map({$0.isSelected = false})
sender.isSelected = true
guard let index = buttons.firstIndex(of: sender) else { return }
switch index {
case 0:
selectedSegment(segmentedControl, buttonSelected: true, indexButton: 0)
case 1:
selectedSegment(segmentedControl, buttonSelected: true, indexButton: 1)
case 2:
selectedSegment(segmentedControl, buttonSelected: true, indexButton: 2)
case 3:
selectedSegment(segmentedControl, buttonSelected: true, indexButton: 3)
default:
break
}
}
@objc private func selectedSegment(_ sender: UISegmentedControl,
buttonSelected: Bool, indexButton: Int) {
let currentIndex = sender.selectedSegmentIndex
if buttonSelected == true {
buttons[indexButton].isSelected = true
} else {
let _ = buttons.map({$0.isSelected = false})
}
switch currentIndex {
case 0:
arrayOfSegments[0].answered = buttonSelected
arrayOfSegments[0].buttonIndex = indexButton
case 1:
arrayOfSegments[1].answered = buttonSelected
arrayOfSegments[1].buttonIndex = indexButton
case 2:
arrayOfSegments[2].answered = buttonSelected
arrayOfSegments[2].buttonIndex = indexButton
default:
break
}
}
【问题讨论】:
-
有很多方法可以做到这一点,这更像是一个软件设计问题。例如,您可以创建一个数组来存储每个段的活动按钮的状态。您可以使用字典,该字典使用段的唯一内容作为键,并将所选按钮作为其值。您甚至可以使用结构来实现这一点。所以选择是你的,或者问题需要更多地关注你尝试了什么,什么没有奏效。我唯一可以确定的是,在您的段操作处理程序中,您需要根据之前存储的内容重新加载按钮状态。
-
你能用更新状态写一个简短的例子吗?)我有一个模型,当我点击一个片段中的一个按钮时,我将按钮的索引保存到这个模型,并保存属性“ buttonClicked”,布尔状态。
-
我建议您将您尝试过的代码添加到您的问题中,并解释哪个部分没有按预期工作。这样我(或其他人)可以帮助我们提出最好的建议。
-
我添加了我的示例
-
所以你有 3 个段和 4 个按钮。对于每个段,您只能选择 1 个按钮?例如,在第 32 段中,我选择了按钮 1。在第 33 段中,我选择了按钮 2。如果我回到第 32 段,它应该以红色显示按钮 1。这是你想要达到的目标吗?
标签: arrays swift button uisegmentedcontrol