私のアプリケーションでは、ユーザーが 4 種類のフィルターから選択する必要があります。彼が 1 つのフィルターを選択すると、残りは閉じます。アプリケーションを起動すると、1 種類のフィルターが事前に選択されます。フィルターを選択するには、UISwitches を使用しています。常に 1 つのスイッチのみをオンにする必要があります。すべてが閉じられることはなく、複数になることもありません。
これを機能させるために、4 つの UISwitch を使用しています。私のコードは次のようになります。
- (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];
}
コードはかなりうまく機能します。すでにオンになっているスイッチを押すと、スイッチが再びオンになります (実際には 0.5 秒間オフになり、その後自動的にオンになります)。別のスイッチを押すと、オンになり、残りはすべてオフになります。問題は、アプリケーションをテストしているときに、スイッチを押してすぐに別のスイッチを押すと、両方がオンになることに気付きました! これは、このコードでは、既にオンになっているスイッチを押すとオフになったりオンになったりするためだと思いますが、別のスイッチを押すとこの「アクション」が発生しますが、両方ともオンにする必要があると「考え」ます。常に 1 つのスイッチのみがオンになっていることを確認するにはどうすればよいですか? スイッチがオンのときにもう一度押す方法があるかどうかはわかりませんが、スイッチをオフにしてオンにするのではなく、アクションに「反応」しないだけです。そして、あったとしても、それはうまくいく解決策ですか?