在我的应用程序中,我需要用户在 4 种类型的过滤器之间进行选择。如果他选择一个过滤器,其余的应该关闭。启动应用程序时,会预先选择 1 种类型的过滤器。要选择过滤器,我正在使用 UISwitches。每次只有 1 个开关应该打开。永远不会全部关闭,也不会超过一个。
为了完成这项工作,我使用了 4 个 UISwitches。我的代码看起来像这样:
- (IBAction)noFilterButtonTapped:(id)sender {
if([noFilterButton isOn]){
[noFilterButton setOn:YES animated:YES];
[filterByTopicButton setOn:NO animated:YES];
[filterByDateButton setOn:NO animated:YES];
[filterByDistanceButton setOn:NO animated:YES];
}
else [noFilterButton setOn:YES animated:YES];
}
- (IBAction)filterByTopicButtonTapped:(id)sender {
if([filterByTopicButton isOn]){
[noFilterButton setOn:NO animated:YES];
[filterByTopicButton setOn:YES animated:YES];
[filterByDateButton setOn:NO animated:YES];
[filterByDistanceButton setOn:NO animated:YES];
}
else [filterByTopicButton setOn:YES animated:YES];
}
- (IBAction)filterByDateButtonTapped:(id)sender {
if([filterByDateButton isOn]){
[noFilterButton setOn:NO animated:YES];
[filterByTopicButton setOn:NO animated:YES];
[filterByDateButton setOn:YES animated:YES];
[filterByDistanceButton setOn:NO animated:YES];
}
else [filterByDateButton setOn:YES animated:YES];
}
- (IBAction)filterByDistanceButtonTapped:(id)sender {
if([filterByDistanceButton isOn]){
[noFilterButton setOn:NO animated:YES];
[filterByTopicButton setOn:NO animated:YES];
[filterByDateButton setOn:NO animated:YES];
[filterByDistanceButton setOn:YES animated:YES];
}
else [filterByDistanceButton setOn:YES animated:YES];
}
该代码运行良好。如果您按下一个已经打开的开关,则该开关会再次打开(实际上是关闭半秒钟然后自动打开)。如果你按下另一个开关,它就会打开,其余的都关闭。问题是,在测试应用程序时,我注意到如果我按下一个开关并立即按下另一个开关,它们都可以打开!我认为发生这种情况是因为使用此代码时,当您点击一个已经打开的开关时,它会关闭然后再次打开,但是如果您点击另一个开关,就会发生这种“动作”,他们都“认为”应该打开。我如何确保始终只有 1 个开关打开?我不知道当开关打开并且您再次按下时是否有一种方法,而不是关闭和打开,而只是不对动作做出“反应”。即使有,它是一个可行的解决方案吗?