【发布时间】:2023-04-05 23:57:02
【问题描述】:
是否可以像使用三路 UISwitch 一样使用具有 3 个段的 UISegmentedControl?我试图在我的应用程序的设置部分使用一个作为货币选择器,但没有成功,当我切换视图时它会一直重置到第一段,这会造成很大的混乱。
我是这样处理的:
IBAction func currencySelection(_ sender: Any) {
switch segmentedControl.selectedSegmentIndex {
case 0:
WalletViewController.currencyUSD = true
WalletViewController.currencyEUR = false
WalletViewController.currencyGBP = false
MainViewController().refreshPrices()
print(0)
case 1:
WalletViewController.currencyUSD = false
WalletViewController.currencyEUR = true
WalletViewController.currencyGBP = false
MainViewController().refreshPrices()
print(1)
case 2:
WalletViewController.currencyUSD = false
WalletViewController.currencyEUR = false
WalletViewController.currencyGBP = true
MainViewController().refreshPrices()
print(2)
default:
break
}
}
【问题讨论】:
-
您可以将状态保存到 UserDefaults 并在每次查看 apper 时读取
-
(1) 当然可以。只要只有一个开关状态是可能的,就可以使用分段控件。 (2) 我的直觉说你做的事情不正确。但是很难根据发布的代码确切地说出什么。
refreshPrices在做什么?为什么它是另一个视图控制器的一部分? “当我切换视图时” 是什么意思?我认为您正在重置分段控件的代码not 中的某处。 (3)如果你把分段控件当成三路开关,那么你贴的switch代码就不需要了。看看selectedSegmentIndex。 -
非常感谢@Masiama 我在
segmentedControl.selectedSegmentIndex上使用UserDefaults成功保存了UISegmentedControl状态。 -
@dfd
refreshPrices用于刷新MainViewController上显示的价格值和NumberFormatter,具体取决于UISegmentedControl的货币选择。我敢肯定我没有做任何事情,因为我能做到的那么简单,哈哈。我使用switch-case逻辑来获取变量,然后当我需要加载任何一个或货币时,我可以在项目的任何地方使用。也许我可以为此使用segmentedControl.selectedSegmentIndex值? -
我刚刚发布了一个答案。您对另一个答案的评论阐明了您正在尝试做的事情。在其中,我建议设置一个委托并展示设置 VC。
标签: swift switch-statement uisegmentedcontrol