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

Xcode 保持一个UIButton按下(状态已选择/突出显示),直到按下另一个按钮?,xcode,ios5,uibutton,uitabbarcontroller,Xcode,Ios5,Uibutton,Uitabbarcontroller,我的视图控制器底部有3个按钮,btn1 btn2 btn3,我用它们代替选项卡栏,因为不可能根据我的要求完全自定义选项卡栏 现在的问题是,当按下btn1时,我希望它将其图像更改为灰色矩形,而不是正常状态的图像。我已使用出口的setimage和uicontrol状态属性为我为按钮btn1Outlet声明的出口中的两种状态设置了图像 问题是,在按下btn2或btn3之前,我无法保持按钮处于选中状态。btn one仅在按下时才会更改为选定状态图像,在我离开它的那一刻,它会更改回其正常状态 在按下其他两

我的视图控制器底部有3个按钮,btn1 btn2 btn3,我用它们代替选项卡栏,因为不可能根据我的要求完全自定义选项卡栏

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

问题是,在按下btn2或btn3之前,我无法保持按钮处于选中状态。btn one仅在按下时才会更改为选定状态图像,在我离开它的那一刻,它会更改回其正常状态


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

要保持按钮处于选定状态,需要在按钮调用的方法中调用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];

}

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

你想做的是

1) 将图像设置为选定状态

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

3) 在按钮操作类型的方法上:

button.selected = !button.selected;
(显然,将按钮替换为您命名的属性)

以下是我所做的:

  • 将所有3个按钮链接到以下操作方法
  • 创建所有3个按钮的数组
  • 将调用该方法的按钮设置为selected
  • 将其他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;
            }
        }
    }
    
  • 希望这有帮助


    干杯

    感谢您的帮助,但当我按下按钮时,应用程序崩溃,出现错误未捕获异常,无法识别的选择器发送到实例。请确保在为按钮设置目标时,将选择器称为“methodThatYourButtonCalls:”而不是“methodThatYourButtonCalls”(请注意,如果计划使用:(id),则必须使用分号)谢谢,这很有效,但解决了我问题的一部分,即按钮确实改变了图像并保持不变,但只有当再次单击按钮时,它才会变回正常状态图像,而不是在单击任何其他按钮时。当然,这些按钮互不相关,你必须自己做逻辑我想在按钮2的操作中添加按钮1.selected=NO;button3.selected=NO;Oh k,谢谢,我想知道这样做是否正确。现在这样做了吗。谢谢。顺便问一下,据你所知,如果我使用这种方法而不是选项卡栏,应用程序审批是否会出现问题?只要没有,但可以自定义选项卡栏。