如何创建可以更改图像的自定义按钮,如圆角矩形

时间:2012-08-05 01:42:26

标签: iphone ios uibutton

我有两个按钮图像,一个用于普通图像,一个用于选择图像。而且我希望它的行为方式与圆形矩形按钮的作用相同,当您触摸时,按钮图像会发生变化,如果您向外拖动,图像会恢复正常。这是我试过的。

首先,我创建了一个自定义视图控制器,然后我在实现中添加了方法,这是你在这里看到的。我把这些方法连接到我的2个按钮,我的播放'按钮'和我的'设置'按钮。

- (IBAction)playButtonSelected:(UIButton *)sender {  //this is for event touchDown
       [sender setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateNormal];

}


- (IBAction)playButtonNotSelected:(id)sender { //this is for event touchUpOutside
    [sender setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal];

}



- (IBAction)settingsButtonSelected:(UIButton *)sender { //this is for event TouchDown
        [sender setImage:[UIImage imageNamed:@"SettingsButtonSelected.png"] forState:UIControlStateNormal];
}

- (IBAction)settingsButtonNotSelected:(id)sender { //this is for event touchUpOutside
      [sender setImage:[UIImage imageNamed:@"SettingsButtons.png"] forState:UIControlStateNormal];
}

嗯,我这样做了,它工作得很好,但有2个问题。

第一:如果我有20个按钮,我必须有40个方法。这不是一个真正的问题,我只是认为它是一个潜在的问题。

第二:当我将按钮拖到外面时,我想在用户实际释放手指之前切换到正常图像。截至目前,图像仅在手指被释放时默认,而不是在手指移动一定距离时默认,因此touchUpInside命令将不会运行。我想要这个,因为它基本上是标准。它还可以帮助用户理解,如果他愿意,他可以收回他点击按钮的冲动行为。

很酷,任何帮助都会有很多帮助!

2 个答案:

答案 0 :(得分:4)

您只需设置一次选定图像和普通图像(例如,创建按钮时)

“state”参数允许您为不同的状态设置不同的图像。您只需编写一次此代码:

[playerButton setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal];
[playerButton setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateSelected];

编辑:您也可以从属性检查器

中的Interface Builder执行此操作

Normal State Selected State

答案 1 :(得分:2)

由于第2部分已经回答,我将回答第1部分,

假设您以编程方式创建按钮,您可以为每个按钮分配标签编号,并为所有按钮设置相同的选择器方法。您可以通过在选择器方法中标识标签号来区分按下了哪个按钮。与此类似:stackoverflow.com/a/11756445/1479411

如果您使用的是界面构建器,则可以将所有按钮连接到相同的IBAction方法,并在每个按钮的属性检查器中手动放置标签编号。同样,您可以通过IBAction方法中的标签号进行区分。

作为补充说明,如果按钮提供完全不同的功能,我将使用#define来识别按钮。这样可以减少以后编码的错误。

#define SETTINGS  1
#define PLAY      2
#define FUNCTION1 3
#define FUNCTION2 4
...