如何禁用 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 状态