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