iOS:设置按钮按下状态

时间:2013-02-22 15:34:34

标签: ios objective-c

我正在努力找到这样做的最佳方法。我在视图控制器上有5个自定义按钮,如果单击它,我会尝试使按钮保持突出显示。我知道怎么做但我试图只允许一次突出显示1个按钮。因此,如果用户单击某个按钮并突出显示该按钮,但单击另一个按钮,则单击的最新按钮将保持突出显示,而之前的按钮将不会突出显示。什么是实现这一目标的最佳方式?

2 个答案:

答案 0 :(得分:3)

您应该保留对所有按钮的引用(例如,如果您使用IB,则在您的代码中包含所有按钮的@property (nonatomic, strong) IBOutlet UIButton *button1;链接)。

然后将所有按钮链接到相同的方法,按下按钮。我称之为buttonPressed

像这样强迫:

- (IBAction)buttonPressed:(id)sender {

    UIButton *buttonPressed = (UIButton*)sender;
    NSArray *buttons = [NSArray arrayWithObjects:_button1, _button2, _button3, nil];
    bool buttonIsHighlighted = NO;

    // Check if a button is already highlighted
    for (UIButton *button in buttons) {

        if (button.highlighted) {

            buttonIsHighlighted = YES;
        }
    }

    // If a button is highlighted, un-highlight all except the one pressed
    // If no button is highlighted, just highlight the right one
    if (buttonIsHighlighted) {

        for (UIButton *button in buttons) {

            if (buttonPressed == button) {

                buttonIsHighlighted = YES;

            } else {

                button.highlighted = NO;
            }
        }

    } else {

        buttonPressed.highlighted = YES;
    }
}

我无法测试此代码,但我很确定它应该可行。如果出现问题,请告诉我。

答案 1 :(得分:0)

解决方案1: 将按钮放在NSArray中,当用户点击按钮时,检查是否突出显示了另一个按钮。如果YES,则取消突出显示并突出显示按下的那个。如果是NO,请直接突出显示按下的那个。

解决方案2: 您可以将突出显示的按钮保存在@interface@property中声明的全局变量中。当用户点击新的时,不会突出显示前一个。