6

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

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

问题是,在按下 btn2 或 btn3 之前,我无法保持按钮处于选中状态。btn 只有在按下它时才会更改为选定状态图像,当我离开它时,它会变回正常状态。

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

4

3 回答 3

4

What you did is set an image for the "Highlighted" state, this is why when you push it you can see your image.

What you want to do is

1) set the image for the SELECTED state

2) create a property for your view controller (just controll drag the button to the header) using the assistant view (while on storyboard, second square on the top right)

3) on your method for the button's action type:

button.selected = !button.selected;

(obviously replace button to whatever you named your property to)

于 2012-06-25T03:18:50.410 回答
3

这是我所做的:

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

希望这可以帮助。

干杯!

于 2013-07-04T05:20:05.083 回答
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];

}
于 2012-06-25T03:07:18.133 回答