1

我正在尝试找到执行此操作的最佳方法。我在视图控制器上有 5 个自定义按钮,如果单击它,我试图让按钮保持突出显示。我知道如何做到这一点,但我试图一次只突出显示 1 个按钮。因此,如果用户单击一个按钮并将其突出显示,但又单击了另一个按钮,则最近单击的按钮将保持突出显示,而前一个按钮将取消突出显示。实现这一目标的最佳方法是什么?

4

2 回答 2

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;
    }
}

我无法测试这段代码,但我很确定它应该可以工作。让我知道是否有问题。

于 2013-02-22T15:48:52.283 回答
0

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

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

于 2013-02-22T15:38:03.840 回答