Ios 点击UIButton时更改其图像

Ios 点击UIButton时更改其图像,ios,objective-c,uitableview,uibutton,uicontrolevents,Ios,Objective C,Uitableview,Uibutton,Uicontrolevents,我有一个UIButton,我正在以编程方式创建并添加到UITableViewCell中 我已经成功地将其设置为,如果您点击按钮并按住它,它将变为我为高亮显示状态设置的图像,但这还不够好 当用户点击按钮时,我需要它完全切换到新图像。如果用户再次点击按钮,我希望它变回原始图像 我希望他们每次点击时图像都会改变。现在,如果他们点击并按住它,它会改变,但一旦他们按住它,它就会切换回原始图像 以下是迄今为止我的按钮代码: UIImage *addFriendButtonImage = [UIImage i

我有一个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,但所有这些都会使原始图像变暗。它甚至不会更改为新图像,并且再次仅在按下按钮时显示其效果。

您需要的是使用[addFriendButton setImage:someImage for State:uicontrol状态正常];每次用户点击addFriendButton时,查找事件UIControlEventTouchUpInside

如果需要,您仍然可以在[addFriendButton setImage:someImage\u highlighted for State:UIControlStateHighlighted]上指定适当的高亮显示图像

您需要为按钮创建iAction方法。如果使用故事板设计视图控制器,请转到助手编辑器中的相应视图控制器,点击Xcode窗口右上角的图标,按住CTRL键并将a线从按钮拖动到视图控制器类的.h文件,如下所示:

选择Action并输入一个命名的方法,如touchUpInsideButton

重复相同的步骤为按钮创建属性。但是选择Outlet而不是Action,并给你的按钮命名为myButton。现在,在.h文件中应该有以下两行:

@property (strong, nonatomic) IBOutlet UIButton *myButton;
- (IBAction)touchUpInsideButton:(id)sender;
现在转到视图控制器的.m文件。搜索新创建的操作方法-IBActiontouchUpInsideButton:idsender,并输入以下代码,以在用户点击按钮时更改按钮的图像:

- (IBAction)touchUpInsideButton:(id)sender {
    UIImage *myImage = [UIImage imageNamed:@"myImageName"];
    [self.myButton setImage:myImage forState:UIControlStateNormal];
}
您可以将任何代码放入此方法中,只要用户点击按钮,该方法就会执行。
如果您使用的是故事板,我建议您使用这种方法。如果没有,请参阅@Corey的回复。

为uicontrol状态突出显示和uicontrol状态选定状态设置图像:

然后侦听UIControlEventTouchUpInside:

然后更新所选状态:

- (void)handleTouchUpInside:(UIButton *)sender {
    sender.selected = !sender.selected;
}

如何查找事件UIControlEventTouchUpInside?向addFriendButton添加目标。如下所示:[addFriendButton addTarget:self action:@selectoraddFriendButtonTouched:forControlEvents:UIControlEventTouchUpInside];捕获已实现方法中的UIControlEventTouchUpInside事件:-voidaddFriendButtonTouched:UIButton*发件人{}谢谢!我不能使用Misha的答案,因为我正在以编程的方式做每件事。你的答案很有效。
[addFriendButton addTarget:self action:@selector(handleTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
- (void)handleTouchUpInside:(UIButton *)sender {
    sender.selected = !sender.selected;
}