我以编程方式创建了5个按钮,我互相给了标签,这个代码块在for
循环中。
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.tag= [[answersID objectAtIndex:m]integerValue];
button.frame = CGRectMake(760*i, 198, 760, 60);
UIImage *buttonImage = [UIImage imageNamed:@"Grey.png"];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
单击按钮后,所选按钮正在更改图像本身。
- (IBAction)clickButton:(id)sender{
buttonPlusID=[sender tag];
if ([sender isSelected]) {
[sender setImage:unselected forState:UIControlStateNormal];
//[sender setSelected:NO];
} else {
[sender setImage:selected forState:UIControlStateSelected];
[sender setSelected:YES];
}
但我想要这个。我有5个按钮,图像是grey.png。我点击了一个按钮,按钮的图像已经改变了green.png,然后我点击了另一个按钮,它将改变green.png,green.png将改变grey.png。像一个单选按钮。有什么办法吗?
抱歉,我的英文不好。感谢您的兴趣。
最诚挚的问候。
答案 0 :(得分:3)
是的,这是一件很常见的事情。我创建了自己的类来处理这种情况。 这个类叫做ControlGroup,它的唯一责任是跟踪你添加到它的所有UIControl,并选择其中一个。控件(在你的情况下是UIButton)不需要知道彼此的任何信息,你可以拥有任意数量的控件。并且不要忘记在完成控件时删除控件,因为这个类将保留它的元素。
这是:
* .h文件:
// This is a very simple class whose only purpose in life is to manage a group of
// UIControls in a way that only one of them is selected at any one time
@interface ControlGroup : NSObject
-(void)addControl:(UIControl*)control;
-(void)removeControl:(UIControl*)control;
-(UIControl*)currentlySelectedControl;
@end
* .m文件:
#import "ControlGroup.h"
@interface ControlGroup ()
@property (nonatomic, strong) NSMutableSet *controls;
@end
@implementation ControlGroup
@synthesize controls = _controls;
-(id)init {
if ((self = [super init])) {
_controls = [[NSMutableSet alloc] init];
}
return self;
}
-(void)addControl:(UIControl*)control {
if (![self.controls containsObject:control]) {
[self.controls addObject:control];
[control addTarget:self action:@selector(controlTouched:) forControlEvents:UIControlEventTouchUpInside];
}
}
-(void)removeControl:(UIControl *)control {
if ([self.controls containsObject:control]) {
[control removeTarget:self action:@selector(controlTouched:) forControlEvents:UIControlEventTouchUpInside];
[self.controls removeObject:control];
}
}
-(void)controlTouched:(id)sender {
if ([sender isKindOfClass:[UIControl class]]) {
UIControl *selectedControl = (UIControl*)sender;
for (UIControl *control in self.controls) {
[control setSelected:FALSE];
}
[selectedControl setSelected:TRUE];
}
}
-(UIControl*)currentlySelectedControl {
UIControl *selectedControl = nil;
for (UIControl *control in self.controls) {
if ([control isSelected]) {
selectedControl = control;
break;
}
}
return selectedControl;
}
-(NSString*)description {
return [NSString stringWithFormat:@"ControlGroup; no. of elements: %d, elements: %@\n", self.controls.count, self.controls];
}
@end
希望这有帮助!
编辑:如何使用此课程
您要做的第一件事就是将它导入您要使用它的地方。在您的情况下,它将是您创建按钮的类:
1)导入课程#import "ControlGroup.h"
然后你必须声明一个属性以保持对它的强引用
2)在* .h文件中添加以下内容:@property (nonatomic, strong) ControlGroup *controlGroup;
之后,在init方法中,您必须创建对象:
3)在init方法中添加:_controlGroup = [[ControlGroup alloc] init];
现在您对可以使用的ControlGroup对象有一个强引用。您需要做的下一步是创建按钮。我相信你已经迈出了这一步。
4)创建按钮。使用UIButton
方法setImage:forState
创建和配置按钮时,为UIControlStateNormal
状态设置一个图像,为UIControlStateSelected
状态设置另一个图像。
最后,对于您创建的每个按钮,您必须将其添加到您拥有的controlGroup
对象中。
5)将每个按钮添加到ControlGroup对象:[self.controlGroup addControl:myButton];
尝试这些步骤,让我知道它是怎么回事。
答案 1 :(得分:1)
跟踪所选的最后一个按钮。然后,当点击按钮时,重置之前选择的按钮,然后更新新点击的按钮。