【问题标题】:Single selection to button like radio button单选按钮,如单选按钮
【发布时间】:2013-08-26 18:37:24
【问题描述】:

我以编程方式创建了 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 个按钮,其中的图像是 gray.png 。我单击了一个按钮,按钮的图像更改了green.png,然后我单击了另一个按钮,它将更改green.png,而green.png 将更改grey.png。就像一个单选按钮。有什么办法吗?

对不起,我的英语不好。感谢您的关注。

最好的问候。

【问题讨论】:

    标签: ios uibutton uiimage


    【解决方案1】:

    是的,这是很常见的事情。我创建了自己的类来处理这种情况。 此类称为 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];

    试试这些步骤,让我知道它对你有什么好处。

    【讨论】:

    • 真的很抱歉,我是 ios 新手,你能帮我整合一下吗?你有什么例子吗?谢谢
    • 你太棒了,非常感谢你,它工作得很好......你是救生员:)
    • 不用担心。我很高兴我能提供帮助。感谢您接受答案。
    【解决方案2】:

    跟踪最后一个被选中的按钮。然后当一个按钮被点击时,在更新新点击的按钮之前重置之前选择的按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2017-07-24
      • 2015-03-09
      相关资源
      最近更新 更多