0

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

首先,我制作了一个自定义视图控制器,然后我在实现中添加了方法,这就是您在此处看到的。我将这些方法连接到我的 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];
}

好吧,我这样做了,效果很好,但是有两个问题。

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

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

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

4

2 回答 2

4

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

“状态”参数让您可以为不同的状态设置不同的图像。您只需要编写一次此代码:

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

编辑:您也可以从属性检查器的 Interface Builder 执行此操作

正常状态 选定的州

于 2012-08-05T02:03:42.757 回答
2

既然回答了第二部分,我就回答第一部分,

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

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

作为附加说明,如果按钮提供完全不同的功能,我将使用#define 来识别它们。这减少了以后编码中的错误。

#define SETTINGS  1
#define PLAY      2
#define FUNCTION1 3
#define FUNCTION2 4
...
于 2012-08-05T02:17:58.767 回答