1

我有一个应用程序,当按下按钮时,会发生一个动作..我可以通过使用以下方式让按钮在动作开始时更改:

UIImage *changeImage = [UIImage imageNamed:@"stopGrey.png"];
[myButton setImage:changeImage forState:UIControlStateNormal];

动作结束后,我希望能够将按钮改回来..我不知道该怎么做..

我已经尝试过 UIControlStateDisabled/Selected/Application.. 我已经登录以确保收到操作结束。

谢谢你的帮助..

4

2 回答 2

4

好的,你需要这样做:

.h 文件:

-(IBAction)ButtonPressed:(id)sender;
-(IBAction)ButtonReleased:(id)sender;

如果您使用的是图形部分,请将 touch down 事件加入到 ButtonPressed 方法中,并将内部的 touch up 加入到 ButtonReleased(右键单击按钮以显示这些选项)。如果您使用代码添加按钮,请使用以下方法(在 .m 文件的 viewdidload 方法中):

[button addTarget:self action:@selector(ButtonPressed:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(ButtonReleased:) forControlEvents:UIControlEventTouchUpInside];

然后你就完成了。每次触摸按钮时都会调用 ButtonPressed 方法,并且每次松开按钮内部的按钮时都会调用 ButtonReleased 方法。对于您的问题,您可以将以下代码添加到方法(.m 文件)

-(IBAction)ButtonPressed:(id)sender
{
    [button setBackgroundImage:[UIImage imageNamed:@"ImageWhenPressed.png"] forState:UIControlStateNormal];
}
-(IBAction)ButtonReleased:(id)sender
{
    [button setBackgroundImage:[UIImage imageNamed:@"ImageWhenReleased.png"] forState:UIControlStateNormal];
}

我还猜测您不知道如何将图形文件中绘制的按钮链接到代码中的指针。首先在 .h 文件中创建一个指针:

IBOutlet UIButton *button;

然后,您转到图形文件并右键单击并拖动文件所有者图像(在左侧,有一个橙色透明的立方体作为图像)到按钮。然后,您选择具有指针名称的选项。在这种情况下,按钮。

那里!你完成了!

于 2011-12-16T05:02:54.907 回答
3

简单地把这样的东西放在viewDidLoad

[myButton setImage:[UIImage imageNamed:@"Normal.png"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"Selected.png"] forState:UIControlStateSelected];
[myButton setImage:[UIImage imageNamed:@"Highlighted.png"] forState:UIControlStateHighlighted];
[myButton setImage:[UIImage imageNamed:@"Disabled.png"] forState:UIControlStateDisabled];

然后按钮本身将处理图像更改。如果您希望在完成后台任务时明显禁用按钮,只需将启用设置为 NO,它将显示禁用的图像。

您可以使用以下touchUpInside目标来测试这些设置:

-(void)buttonPushed:(id)sender{
    [myButton setEnabled:NO];

    // Simulate pause before stuff is done
    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [myButton setEnabled:YES];
    });
}
于 2011-12-18T06:28:45.583 回答