带2个按钮的分段控件

时间:2011-09-30 13:28:26

标签: iphone sdk uibutton background-image uisegmentedcontrol

我正在尝试使用2个Round rect按钮创建一个分段控件,但不知道如何为Highlighted按钮设置'forState'。

其他人说要在IB中设置背景图像并以编程方式修改图像

尝试:

[buttonName setImage:[UIImage imageNamed:@"UnselectedImage.png"] forState:UIControlStateNormal];
[buttonName setImage:[UIImage imageNamed:@"SelectedImage.png"] forState:UIControlStateHighlighted];

问题是我点击后背景图片没有重新出现,任何线索?

4 个答案:

答案 0 :(得分:1)

仅在用户触摸按钮时使用“突出显示”状态。一旦用户从按钮上释放他/她的手指,状态就会恢复正常。

您可以尝试使用“已选择”状态(未经测试但值得尝试,因为它似乎很合乎逻辑)。如果它不起作用,您可能需要自己通过代码更改按钮的“选定”状态(在按钮操作或segmentedControl委托方法中)

答案 1 :(得分:1)

您需要为UIControlStateSelected设置所选图片,而不是UIControlStateHighlighted

答案 2 :(得分:1)

UIButton有点像瞬间开关。它没有“现在热”的状态。 “突出显示”实际上只是在被点击时,然后就是在那个状态之外。

看起来您可能需要一些外部变量来跟踪按钮的状态,也可能需要管理图像的混乱。

我喜欢那个形象。一旦你开始运行,这将是一个很好的效果。

答案 3 :(得分:1)

您可以尝试以下代码:

1图片:

int iButtonState = 1;

if (iButtonState  == 1) {
    [buttonName setImage:[UIImage imageNamed:@"Normal.png"] forState:UIControlStateNormal];
    iButtonState = 2;
} else if (iButtonState  == 2) {
    [buttonName setImage:[UIImage imageNamed:@"Other.png"] forState:UIControlStateNormal];
    iButtonState = 1;
}

2张图片:

int iButtonState = 1;
int iTabImageA = 1;
int iTabImageB = 1;

if (iButtonState  == 1) {
    if (iTabImageA == 1) {
        [buttonName setImage:[UIImage imageNamed:@"ImageA1.png"] forState:UIControlStateNormal];
        iTabImageA = 2;
    } else if (iTabImageA == 2) {
        [buttonName setImage:[UIImage imageNamed:@"ImageA2.png"] forState:UIControlStateNormal];
        iTabImageA = 1;
    }
    iButtonState = 2;
} else if (iButtonState  == 2) {
    if (iTabImageB == 1) {
        [buttonName setImage:[UIImage imageNamed:@"ImageB1.png"] forState:UIControlStateNormal];
        iTabImageB = 2;
    } else if (iTabImageB == 2) {
        [buttonName setImage:[UIImage imageNamed:@"ImageB2.png"] forState:UIControlStateNormal];
        iTabImageB = 1;
    }
    iButtonState = 1;
}