在我的应用程序中,我需要用户在4种类型的过滤器之间进行选择。如果他选择一个过滤器,其余的应关闭。启动应用程序时,将预选择1种类型的过滤器。要选择过滤器,我正在使用UISwitches。每次1且仅应打开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个开关?我不知道是否有办法在打开开关后再次击打,而不是关闭然后再打开,而只是不对动作进行“反应”。即使有,它是否会起作用?

最佳答案

- (IBAction)filterByDateButtonTapped:(id)sender
{
    if(![filterByDateButton isOn])
        [filterByDateButton setOn:YES animated:YES];

    if([noFilterButton isOn])
        [noFilterButton setOn:NO animated:YES];

    if([filterByTopicButton isOn])
        [filterByTopicButton setOn:NO animated:YES];

    if([filterByDistanceButton isOn])
        [filterByDistanceButton setOn:NO animated:YES];
}


显然其他方法也应该像这样。

希望这可以帮助。

干杯!

关于objective-c - 将UISwitches用作iOS上的单选按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11492574/

10-09 04:09