点击时选择/取消选择UIButton
问题描述:
我有一个简单的问题,我似乎无法找到答案。点击时选择/取消选择UIButton
我有几个UIButton
s存储在一个NSArray
,与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{
if ([sender isSelected]) {
[sender setSelected: NO];
} else {
[sender setSelected: YES];
}
}
答
绑定与该单IBAction为所有按钮
- (IBAction)buttonPressed:(UIButton *)sender
{
if ([sender isSelected]) {
[sender setSelected:NO];
}
else
{
[sender setSelected:YES];
}
}
答
为什么你连这样做?这太复杂了。最简单的方法就是做这个
- (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
将是按钮正确链接所有的按钮了这被按下。所以在开始时不需要冗余阵列。
答
我想出了一个很简单的方法来解决这个问题。我的例子是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];
}
}
感谢您的回复,我喜欢短代码版本,所以我会实现它! – rosshump 2014-09-12 11:45:15