保持UIButton按下(状态选择/突出显示),直到按下另一个按钮?

时间:2012-06-24 21:30:28

标签: xcode ios5 uibutton uitabbarcontroller

我的视图控制器底部有3个按钮,btn1 btn2 btn3,我正在使用它们而不是标签栏,因为根据我的要求无法完全自定义标签栏。

现在的问题是,当按下btn1时,我希望它将其图像更改为灰色矩形,而不是正常的状态图像。我已使用插座的setimage和uicontrolstate属性为我为按钮btn1Outlet声明的插座设置了两种状态的图像。

问题是,在按下btn2或btn3之前,我无法保持按钮的选择状态。 btn只要按下它就会改变选定的状态图像,当我离开它时,它会变回正常状态。

在按下任何其他2个按钮之前,如何将btn1的图像保留为选定图像?

3 个答案:

答案 0 :(得分:4)

您所做的是为“突出显示”状态设置图像,这就是当您按下它时可以看到图像的原因。

你想做的是

1)将图像设置为SELECTED状态

2)使用助手视图创建视图控制器的属性(只需将按钮拖动到标题)(在故事板上,右上角的第二个方块)

3)关于按钮操作类型的方法:

button.selected = !button.selected;

(显然将按钮替换为你命名的属性的按钮)

答案 1 :(得分:2)

这就是我的所作所为:

  1. 将所有3个按钮链接到以下操作方法
  2. 创建所有3个按钮的数组
  3. 将调用该方法的按钮设置为选定的
  4. 将其他2个按钮设为未选择

    - (IBAction)buttonPressed:(id)sender
    {
        NSArray* buttons = [NSArray arrayWithObjects:btn1, btn2, btn3, nil];
        for (UIButton* button in buttons) {
            if (button == sender) {
                button.selected = YES;
            }
            else {
                button.selected = NO;
            }
        }
    }
    
  5. 希望这有帮助。

    干杯!

答案 2 :(得分:1)

要保持选中该按钮,您需要在按钮调用的方法中调用setSelected:YES。例如:

- (void) methodThatYourButtonCalls: (id) sender {
        [self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];


}

- (void) flipButton:(UIButton*) button {
    if(button.selected) 
        [button setSelected:NO];
    else
        [button setSelected:YES];

}

我知道调用performSelector看起来有点奇怪:而不是只调用[sender setSelected:YES],但后者永远不适合我,而前者呢!

为了在按下不同的按钮时取消选择按钮,我建议添加一个实例变量,该变量包含指向当前所选按钮的指针,因此当触摸新按钮时,您可以调用flipButton:取消选择旧按钮一个相应的。所以现在你的代码应该是:

添加指向界面的指针

@interface YourViewController : UIViewController
{
    UIButton *currentlySelectedButton;
}

以及这些实施方法

- (void) methodThatYourButtonCalls: (id) sender {
    UIButton *touchedButton = (UIButton*) sender;

    //select the touched button 
    [self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0]; 

    if(currentlySelectedButton != nil) { //check to see if a button is selected...
        [self flipButton:currentlySelectedButton];

    currentlySelectedButton = touchedButton;
}

- (void) flipButton:(UIButton*) button {
    if(button.selected) 
        [button setSelected:NO];
    else
        [button setSelected:YES];

}