ios - 为什么我的 UIButton 的选中状态在我松开手指之前没有触发?

标签 ios cocoa-touch uibutton selected

我正在尝试创建一个从其 normal 切换的按钮状态为 selected简单地触摸它,反之亦然。但是,我没能成功。这是我的代码:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *button = [UIButton new];
    [button setImage:[UIImage imageNamed:@"touch_normal.png"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"touch_selected.png"] forState:UIControlStateSelected];

    button.frame = CGRectMake(138.5, 208.5, 63, 63);
    [button addTarget:self action:@selector(touch:) forControlEvents:UIControlEventTouchDown];
    button.adjustsImageWhenHighlighted = NO;

    [self.view addSubview:button];
}

- (void)touch:(id)sender
{
    NSLog(@"Touch");

    UIButton *button = sender;

    if (button.selected)
        button.selected = NO;
    else
        button.selected = YES;
}

@end

当我点击并按住时,touch正如预期的那样,方法被触发。但是,按钮的图像仅更改为 touch_selected.png在我松开手指后。知道可能是什么问题吗?

编辑:我知道什么UIControlStateHighlighted是,但不是我要找的,因为我希望我的按钮更改为 selected我触摸它后的状态(但当我仍然用手指按住它时),它应该留在 selected 中。我的手指从屏幕上移开后的状态。

最佳答案

您可能想更改突出显示状态的图像。

您不需要在 touch: 方法中执行任何操作。

只需更改行:

[button setImage:[UIImage imageNamed:@"touch_selected.png"] forState:UIControlStateSelected];

对于:

[button setImage:[UIImage imageNamed:@"touch_selected.png"] forState:UIControlStateHighlighted];

然后当按钮被触摸时图像应该改变。

编辑:

要让按钮在触摸被释放后保持图像,您基本上想要在每次按钮上释放触摸时反转所选状态。 我建议向按钮添加一个目标:

[myButton addTarget:self action:@selector(buttonPushed) forControlEvent:UIControlEventTouchUpInside];

然后在该方法中,反转选定状态:

- (void)buttonPushed
{
    [myButton setSelected:!myButton.selected];
}

这应该可以解决问题!

关于ios - 为什么我的 UIButton 的选中状态在我松开手指之前没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189464/

相关文章:

ios - 带有自定义字体的 UITextField secureTextEntry 项目符号?

ios - 使用 UIButton 向 Timer 添加和减少时间

ios - 加载 View 后无法更新 UIButton.image

ios - Firebase 在登录时验证电子邮件

iphone - ASIHTTPRequest zlib解压

Iphone:滚动时 UITableview 中的复选标记会混淆

ios - 有人让 UIActionSheet (buttonIndex, delegate) 更像 UIButton (addTarget :action)?

javascript - pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);

ios - 在 iOS 中渲染数学方程式

cocoa-touch - Cocoa 类通过单个键引用多个条目