【问题标题】:keeping a UIButton pressed(state selected/highlighted),until another button is pressed?保持按下 UIButton(状态选择/突出显示),直到按下另一个按钮?
【发布时间】:2012-06-26 05:40:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: xcode ios5 uibutton uitabbarcontroller


    【解决方案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];
    
    }
    

    【讨论】:

    • 感谢您的帮助,但是当我按下按钮时应用程序崩溃,出现错误未捕获的异常,无法识别的选择器发送到实例。
    • 确保在为按钮设置目标时调用选择器“methodThatYourButtonCalls:”而不是“methodThatYourButtonCalls”(请注意,如果您打算使用 :( id) 发件人参数
    【解决方案2】:

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

    你想做的是

    1) 将图像设置为 SELECTED 状态

    2) 使用助手视图(在情节提要上,右上角的第二个正方形)为您的视图控制器创建一个属性(只需控制将按钮拖动到标题)

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

    button.selected = !button.selected;
    

    (显然将按钮替换为您将属性命名为的任何内容)

    【讨论】:

    • 谢谢,这有效,但解决了我的问题的一部分,即按钮确实改变了图像并保持不变,但它只有在再次单击按钮时才会恢复正常状态图像,而不是当单击任何其他按钮。
    • 当然,这些按钮之间没有关联,你必须自己做逻辑。类似按钮 2 的操作添加 button1.selected = NO; button3.selected=否;
    • 哦,谢谢,我想知道这是否是正确的方法。现在就这样做了。谢谢。顺便说一句,根据您的知识,如果应用程序批准可能会出现问题我用这种方法代替标签栏?
    • 只要有理由不,但可以自定义标签栏。
    【解决方案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-01-14
      • 2014-06-14
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多