我有一个UIButton,我以编程方式创建并添加到UITableViewCell。
我已经成功设置了它,如果你点击按钮并保持按住它,它将变为我为“突出显示状态”设置的图像,但这还不够好。
当用户点击按钮时,我需要它完全切换到新图像。如果用户再次点击该按钮,我希望它更改回原始图像。
我希望每次点按时图像都会改变。现在它会改变,如果他们点击并继续按住它,但一旦完成按住它就会切换回原始图像。
以下是我到目前为止按钮的代码:
UIImage *addFriendButtonImage = [UIImage imageNamed:@"SliderThumb-Normal-G"];
UIImage *addFriendButtonImageHighlighted = [UIImage imageNamed:@"SliderThumb-Normal"];
UIButton *addFriendButton = [[UIButton alloc]init];
addFriendButton.frame = CGRectMake(237, -10, 64, 64);
[addFriendButton setImage:addFriendButtonImage forState:UIControlStateNormal];
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateHighlighted];
我也尝试将新图像的状态设置为“UIControlStateSelected”,但这样做会使原始图像变得更暗。它甚至没有更改为新图像,并且只有在按住按钮时它才会显示它的效果。
答案 0 :(得分:3)
为UIControlStateHighlighted
和UIControlStateSelected
状态设置图片:
[addFriendButton setImage:addFriendButtonImage forState:UIControlStateNormal];
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateHighlighted];
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateSelected];
然后听UIControlEventTouchUpInside
:
[addFriendButton addTarget:self action:@selector(handleTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
然后更新所选状态:
- (void)handleTouchUpInside:(UIButton *)sender {
sender.selected = !sender.selected;
}
答案 1 :(得分:0)
每当用户点击[addFriendButton setImage:someImage forState:UIControlStateNormal];
时,您想要的是使用addFriendButton
设置新图片(查找事件UIControlEventTouchUpInside
)。
如果您需要,您仍然可以在[addFriendButton setImage:someImage_highlighted forState:UIControlStateHighlighted];
答案 2 :(得分:0)
您需要为按钮创建IBAction
方法。如果您使用故事板设计视图控制器,请转到助理编辑器中的相应视图控制器(点击Xcode窗口右上角的图标),然后按CTRL +拖动按钮到视图控制器类的.h文件,如下所示:
选择Action
并输入touchUpInsideButton
等方法的命名。
重复相同的步骤为按钮创建属性。 (但是请选择Outlet
而不是Action
,并为您的按钮指定一个名称myButton
。)现在您应该在.h文件中包含以下两行:
@property (strong, nonatomic) IBOutlet UIButton *myButton;
- (IBAction)touchUpInsideButton:(id)sender;
现在转到视图控制器的.m文件。搜索新创建的操作方法- (IBAction)touchUpInsideButton:(id)sender
并输入以下代码,以便在用户点按按钮时更改按钮的图像:
- (IBAction)touchUpInsideButton:(id)sender {
UIImage *myImage = [UIImage imageNamed:@"myImageName"];
[self.myButton setImage:myImage forState:UIControlStateNormal];
}
(只要用户点击按钮,您就可以在此方法中放置任何代码。) 如果您使用的是故事板,我会推荐这种方法。如果没有,请参阅@Corey的回复。