自定义单选按钮为iphone一次选择一个?
我动态地创建了一些带有一些值的单选按钮列表。从语法上讲,我改变了按钮状态,改变了选中和未选中的图像。但问题是我可以同时选择所有单选按钮。实际上我需要一次选一个。 当我单击下一个单选按钮时,以前选择的按钮状态应更改为未选择 这是我的代码,我试图改变图像,但是…我的代码有一些问题自定义单选按钮为iphone一次选择一个?,iphone,radio-button,state,selected,Iphone,Radio Button,State,Selected,我动态地创建了一些带有一些值的单选按钮列表。从语法上讲,我改变了按钮状态,改变了选中和未选中的图像。但问题是我可以同时选择所有单选按钮。实际上我需要一次选一个。 当我单击下一个单选按钮时,以前选择的按钮状态应更改为未选择 这是我的代码,我试图改变图像,但是…我的代码有一些问题 RadioButton = [UIButton buttonWithType:UIButtonTypeCustom]; [RadioButton setFrame:CGRectMake(0.0f, 0.0f,
RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
[RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
[RadioButton setCenter:CGPointMake(116.0,p1)];
[RadioButton setSelected:NO];
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
[RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.scrollView addSubview:RadioButton];
-(void)RadioButtonTapped:(id)sender
{
UIButton *RadioButton1 = (UIButton*)sender ;
[self radiobuttonAction:RadioButton1];
}
-(void)radiobuttonAction:(UIButton *)Button
{
if(![Button isSelected])
{
[Button setSelected:YES];
[Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing
}
else
{
[Button setSelected:NO];
[Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal];
}
}
在哪里可以更改以前选择的按钮的图像
提前感谢创建这样的按钮
for(int i=0;i<4;i++)
{
RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
RadioButton.tag = i*100;
[RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
[RadioButton setCenter:CGPointMake(116.0,p1)];
[RadioButton setSelected:NO];
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
[RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.scrollView addSubview:RadioButton];
}
-(void)radiobuttonAction:(UIButton *)Button
{
UIButton *Button = (UIButton*)sender;
for(UIButton * btn in self.scrollview.subViews)
{
if(btn.tag == Button.tag)
{
if(![Button isSelected])
{
[Button setSelected:YES];
[Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing
}
else
{
[Button setSelected:NO];
[Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal];
}
}
else
{
//do selected or de-selected code for other buttons
}
}
在创建时标记按钮。
点击按钮时,通过标签获取按钮。取消选择所有按钮。更新作为n参数收到的当前按钮。假设要添加5个单选按钮
- (void)viewDidLoad
{
for (int i = 0; i < 5; i++) {
UIButton* RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
[RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
[RadioButton setCenter:CGPointMake(116.0, i * 40)];
// [RadioButton setTag:i * 10];
[RadioButton setSelected:NO];
[RadioButton setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal];
[RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.scrollView addSubview:RadioButton];
}
}
//do not forget to declared this in your header file
-(void)RadioButtonTapped:(UIButton*)button;
{
for (UIButton *btn in self.scrollView.subviews) {
[btn setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal];
}
[button setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal];
}
-(void)viewDidLoad
{
对于(int i=0;i<5;i++){
UIButton*RadioButton=[UIButton Button类型:UIButtonTypeCustom];
[RadioButton设置框:CGRectMake(0.0f,0.0f,20,20)];
[RadioButton设置中心:CGPointMake(116.0,i*40)];
//[无线按钮设置标签:i*10];
[选择的单选按钮设置:否];
[RadioButton setImage:[UIImage ImageName:@“unCheck.png”]用于状态:UIControlStateNormal];
[RadioButton添加目标:自操作:@选择器(RadioButton标记:)用于控制事件:UIControlEventTouchUpInside];
[self.scrollView addSubview:RadioButton];
}
}
//不要忘记在头文件中声明这一点
-(无效)RadioButton带有:(UIButton*)按钮;
{
用于(self.scrollView.subview中的UIButton*btn){
[btn setImage:[UIImage ImageName:@“unCheck.png”]用于状态:UIControlStateNormal];
}
[按钮设置图像:[UIImage ImageName:@“check.png”]用于状态:UIControlStateNormal];
}
上面的代码更新UI,将所有按钮的图像设置为“取消选中”,然后将上次按下的按钮的图像更改为“选中”。选择一个按钮时,取消选择所有按钮。如果滚动视图中有按钮,则可以使用以下代码:
//Your Method
-(void)RadioButtonTapped:(id)sender
{
UIButton *RadioButton1 = (UIButton*)sender;
[self deselectAll];
[self radiobuttonAction:RadioButton1];
}
- (void) deselectAll : (UIScrollView *) scrollView{
NSArray *viewArray = [scrollView subviews];
for (UIView *v in viewArray){
if([v isKindOfClass:[UIButton class]]){
[((UIButton *)v) setSelected:NO];
}
}
}
编辑:但是如果你想给它真正的单选按钮效果(其中一个总是被选中,并且只有一个被选中),它对你来说会更容易。使用以下代码:
//A globle refButton
UIButton *refButton = nil;
//Set image for both state:
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
[RadioButton setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateSelected];
//make any of above default select: may be the last one and pass that to `refButton`
refButton = RadioButton;
//Your Method
-(void)RadioButtonTapped:(id)sender
{
[refButton setSelected:NO];
refButton = (UIButton*)sender;
[refButton setSelected:YES];
}
在按钮上设置插座如何?例如,您有3个按钮,设置3个插座,这样可以很容易解决您的问题。但是我动态创建了按钮,
RadioButtonTapped
——在这里,您是否在每个按钮中都使用此按钮?是的,当我们按下任何单选按钮时,将调用点击操作。请描述一下为什么将标签更改为RadioButton.tag=i*100,结果应该是什么?它现在与这个解决方案一起工作。感谢您的反馈谢谢您的反馈,它与RPTw此解决方案配合使用。但是,还有一个疑问,我必须记录标记值NSLog(@“%d”,refButton.tag);,但标记值始终显示为0。既然我需要标签值来检索相应的数据,那么在添加这些标签值时,您是如何将标签值添加到按钮的呢?如果没有,那么就这样做。如果问题仍然存在,请告诉我。