如何禁用 UIButton 突出显示操作

Posted

技术标签:

【中文标题】如何禁用 UIButton 突出显示操作【英文标题】:How to disable UIButton highlight action 【发布时间】:2013-01-21 14:38:27 【问题描述】:

我正在尝试用两个按钮实现分段控制的模拟。在默认状态下,他们没有图像,只有标签,在选定的一个他们有背景图像。我想用 TouchDown 事件激活控件。

这是代码(我删除了所有不必要的东西):

-(IBAction) onButton1

    button1.selected = YES;
    button2.selected = NO;


-(IBAction) onButton2

    button1.selected = NO;
    button2.selected = YES;

问题是:假设 button1 被选中。当我触摸 button2 时,它不会将其图像更改为“选定”图像(正如我所说,没有默认图像),但是当我松开手指时它会改变。此外,如果我触摸已选择的按钮,它会删除“选定”图像并在我释放它时返回它。

我设置了按钮的突出显示状态,因此它们在该状态下“选择”了图像,但这没有帮助(不仅在 IB 中,而且在 [button setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateHighlighted]; 中)。我已经设置了 adjustsImageWhenHighlighted = NO,这同样对程序方式和 IB 都没有帮助。

我在这里看到了很多类似(但不相同)的问题,但它们对我没有用。

提前致谢

【问题讨论】:

【参考方案1】:

由于您想在触地事件中激活动作,我假设您不需要突出显示。试试下面的代码

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    button1.frame = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f);
    [button1 setBackgroundImage:[UIImage imageNamed:@"btn.jpeg"] forState:UIControlStateNormal];
    [button1 setBackgroundImage:[UIImage imageNamed:@"btnsel.jpeg"] forState:UIControlStateSelected];
    [button1 addTarget:self action:@selector(button1Action:) forControlEvents:UIControlEventTouchDown];
    [button1 addTarget:self action:@selector(button1TouchUp:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];

    [self.view addSubview:button1];
    button1.selected = YES;

    button2 = [UIButton buttonWithType:UIButtonTypeCustom];
    button2.frame = CGRectMake(80.0f, 10.0f, 50.0f, 50.0f);
    [button2 setBackgroundImage:[UIImage imageNamed:@"btn.jpeg"] forState:UIControlStateNormal];

    [button2 setBackgroundImage:[UIImage imageNamed:@"btnsel.jpeg"] forState:UIControlStateSelected];
    [button2 addTarget:self action:@selector(button2Action:) forControlEvents:UIControlEventTouchDown];
    [button2 addTarget:self action:@selector(button2TouchUp:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];

    [self.view addSubview:button2];


- (void)button1Action:(UIButton*)sender

    button1.highlighted = NO;
    button1.selected = YES;
    button2.selected = NO;


- (void)button2Action:(UIButton*)sender

    button2.highlighted = NO;
    button2.selected = YES;
    button1.selected = NO;    


- (void)button1TouchUp:(id)sender

    button1.highlighted = NO;


- (void)button2TouchUp:(id)sender

    button2.highlighted = NO;

【讨论】:

我不仅不需要高亮,也不应该在这里。您的代码确实禁用了它,除非您触摸已选择的图像..应该有最后一步:)无论如何,谢谢 我真的不明白你的评论。但是,我正在分享项目的链接dropbox.com/s/3k4fyswhg7kyij4/Stack.zip。你可以看看。谢谢。 对不起我的英语。我真的应该改进它并停止在英语中使用俄语结构:) 最后我在 TouchUp、TouchDown 和 TouchDrag 事件中设置了 highlight = NO 并且似乎一切正常,所以感谢您的回答!

以上是关于如何禁用 UIButton 突出显示操作的主要内容,如果未能解决你的问题,请参考以下文章

禁用 UIButton 的突出显示 UIControl 状态

在 Storyboard 和 Swift 2 中禁用 UIButton 突出显示

如何在nib文件中按下时禁用UIButton高亮显示?

在滑动手势识别器上禁用“在突出显示时显示触摸”

如何创建具有渐变和突出显示的 UIButton?

如何在 UIImage 上像 UIButton 一样在点击时实现突出显示?