[英]Select / deselect UIButton when tapped
我有一个简单的问题,我似乎无法找到答案。
我有几个存储在NSArray
中的UIButton
,有一个for
循环来设置button.selected = YES
当它们被点击时。 我需要在点击时取消选择相同的按钮,但我似乎无法在网上找到任何帮助。 这是我的代码:
- (IBAction)buttonPressed:(UIButton *)sender {
NSArray *buttons = [NSArray arrayWithObjects:_asbBtn, _vwfBtn, _bpBtn, _rtaBtn, _mslmBtn, _pbaBtn, _rcfBtn, _mspBtn, _wpBtn, _aawBtn, _ppiBtn, _convBtn, nil];
// Select buttons
for (UIButton *button in buttons) {
if (button == sender) {
button.selected = YES;
}
}
}
也许这不是最好的方法,对不起,如果我错过了一些简单的事情。 我试过添加else { button.selected = NO;
但这只允许选择一个按钮并取消选择所有其他按钮。 有人可以指导我正确的方向,在点击时取消选择当前选定的按钮。
如果要在每次单击UIButton
实例时在选定和未选定状态之间切换,可以使用下面的Objective-C代码:
- (IBAction) buttonPressed:(id)sender {
if ([sender isSelected]) {
[sender setSelected: NO];
} else {
[sender setSelected: YES];
}
}
请注意,您可以使用更短的实现获得相同的结果:
- (IBAction) buttonPressed:(id)sender {
[sender setSelected: ![sender isSelected]];
}
使用Swift 3,您将使用以下代码:
@IBAction func buttonPressed(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
}
你为什么这样做呢? 那太复杂了。 简单的方法是这样做
- (IBAction)reasonTapped:(id)sender
{
// Personal preference here but I would check to make sure
// that the sender is actually a button.
if([sender isKindOfClass:[UIButton class]]) {
// Sender will be the button that is pressed.
if([sender isSelected]) {
// If already selected then set to selected to NO
[sender setSelected:NO];
} else {
// Else set to selected to YES
[sender setSelected:YES];
}
} else {
// Else if not an instance of UIButton throw some sort of warning.
}
}
如果您在代码或界面/故事板中正确链接了所有按钮,当用户按下按钮时,它将调用此方法, sender
将是按下的按钮。 因此在开始时不需要冗余阵列。
使用此单个IBAction绑定所有按钮
- (IBAction)buttonPressed:(UIButton *)sender
{
if ([sender isSelected]) {
[sender setSelected:NO];
}
else
{
[sender setSelected:YES];
}
}
试试这段代码:
-(IBAction)reasonTapped:(id)sender{
if ([sender isSelected]) {
[sender setSelected: NO];
} else {
[sender setSelected: YES];
}
}
我想出了一个很容易解决这个问题的方法。 我的示例是2个按钮,但您可以轻松添加更多if语句以添加其他按钮。 将所有按钮作为属性连接到.h文件并命名它们(我做了button1和button2)。 将以下代码放在.m文件中并将其(通过故事板)连接到所有按钮。 确保在设置按钮时为正常的UIControlStateNormal和UIControlStateSelected设置图像,或者这不起作用。
- (IBAction)selectedButton1:(id)sender {
if ([sender isSelected]) {
[sender setSelected:NO];
if (sender == self.button1) {
[self.button2 setSelected:YES];
}
if (sender == self.button2) {
[self.button1 setSelected:YES];
}
}
else
{
[sender setSelected:YES];
if (sender == self.button1) {
[self.button2 setSelected:NO];
}
if (sender == self.button2) {
[self.button1 setSelected:NO];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.