【问题标题】:What's the right UIControlState for the UIButton being pressed?按下 UIButton 的正确 UIControlState 是什么?
【发布时间】:2011-12-21 10:32:00
【问题描述】:

我在这里以编程方式自定义UIButton

button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setSelected:YES];
        button.frame = CGRectMake(x, y, width, height);
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected];
        [button setTitle:@"Button Title" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
        [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateSelected];
        [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted];
        [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateDisabled];

问题是如果我按住图像背景图像会消失,直到我释放它...

【问题讨论】:

    标签: iphone uibutton ios5 background-image


    【解决方案1】:

    我认为你处于矫枉过正的模式:)。尝试为 UIControlStateNormal 设置 button.png,为 UIControlStateHighlighted 设置 buttonActive.png。其余的都不需要。看看这是否有效。

    编辑:

    另外,请记住:图像文件名区分大小写

    您在设备上进行测试吗?图像名称对于设备版本区分大小写,但对于模拟器则不区分大小写。例如,如果您的实际图像文件名为 buttonactive.png,但您在代码中将其称为 buttonActive.png,则它将显示在模拟器上,但不会显示在设备上。

    请确保两个图像名称的大小写与实际文件的名称一致。

    编辑#2:

    试试这个代码

    button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setSelected:YES];
        button.frame = CGRectMake(x, y, width, height);
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected];
        [button setTitle:@"Button Title" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
        [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted];
    

    【讨论】:

    • 我可能会补充一点,图像文件名在设备上区分大小写,但在模拟器中不区分大小写。这让我摸不着头脑:)
    • @Sid:我知道图像名称区分大小写。我正在 iPhone 模拟器上进行测试,但反应应该一样...
    • @El.Severo:您是否尝试为这两个州设置图像?
    • @Sid:是的,但我不想那样……我需要按钮上方的标题;所以唯一的选择是将图像放在背景中
    • 也许我应该详细说明...我的意思是让所有代码保持不变,除了设置图像的最后一部分。我已经编辑了我的答案,所以请查看...
    【解决方案2】:

    弄清楚,它是这样工作的:

    [_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:UIControlStateSelected];
    [_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:(UIControlStateHighlighted|UIControlStateSelected)];
    

    【讨论】:

      【解决方案3】:

      当我们从 IDE 添加一个按钮时

      样本:

      .h file
      -(IBAction)BtnAdd:(id)sender
      

      .m文件中

      -(IBAction)BtnAdd:(id)sender
      {
      }
      

      这是一种无法启用或禁用的方法。

      所以如果你想启用或禁用按钮,请将其设置为-(IBOutlet)BtnAddIBOutlet 添加到.h 文件并将其连接到特定按钮 那么BtnAdd.enabled=NO 就可以了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-07
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多