【问题标题】:iOS: setting alphas of multiple buttons at onceiOS:一次设置多个按钮的 alpha
【发布时间】:2015-07-30 16:34:14
【问题描述】:

好的,所以我真的不知道 NSDictionary 是否是解决此问题的正确方法,但我正在使用淡入淡出动画来将不同的按钮组打开和关闭屏幕。可以说,我想将它们“划分”到不同的组中,这样我就可以在一两行中完成此操作,而不必每次都重写所有按钮名称(数量很多)。关于如何做到这一点的任何想法?

[UIView animateWithDuration: 1.5
        animations: ^(void)
        {
            //As an example i just called them button1, button2, etc.
            self.button1.alpha = 1;
            self.button2.alpha = 1;
            self.button3.alpha = 1;
            self.button4.alpha = 1;
            self.button5.alpha = 1;
        }
 ];

我将上述内容作为我所要求的示例。有没有办法将所有按钮放在 NSDictionary 中并写一行(按钮当前所在的位置)来更改它们的所有 alpha?

【问题讨论】:

    标签: ios objective-c xcode animation nsdictionary


    【解决方案1】:

    现在,您在 Interface Builder 中添加的按钮的首选机制是 IBOutletCollection

    @property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *buttons;
    

    显然,在 Interface Builder 中,您可以将各个按钮连接到 outlet 集合。有关 IBOutletCollection 的讨论,请参阅 NSHipster 的 IBAction / IBOutlet / IBOutlet​Collection 文章。

    如果您没有使用 Interface Builder,而是以编程方式创建了这些按钮,您可以只使用 NSArray

    @property (strong, nonatomic) NSArray *buttons;
    

    然后你自己填充:

    self.buttons = @[self.button1, self.button2, self.button3, self.button4, self.button5, self.button6];
    

    无论您如何构建此数组(插座集合或手动填充),您都可以在更新按钮的属性时遍历该数组:

    for (UIButton *button in self.buttons) {
        button.alpha = 1;
    }
    

    或者,更简单的是,您可以使用setValue:forKey: 更新所有这些:

    [self.buttons setValue:@1 forKey:@"alpha"];
    

    【讨论】:

    • 我注意到 avismara 也发布了类似的答案,但我不清楚他为什么删除它。我认为奥特莱斯收藏比tag 方法要好得多。
    • 很好的答案,但是,如果您不使用情节提要怎么办?
    • @BenjaminJimenez - 然后将自己的NSArray 设置为@[self.button1, self.button2, etc.](或在创建按钮时添加按钮的可变数组)。请参阅修改后的答案。
    • 非常感谢!我首先尝试了 for 语句,但它不起作用,但第二行你已经完美地工作了!
    【解决方案2】:

    您可以使用按钮标签来完成此操作。为多个按钮(您的组)设置相同的标签并执行:

    button.tag = 1;
    

    然后:

    for (UIButton *btn in button) {
        if(btn.tag == 1)
        {
            // do something
            break; // don't need to run the rest of the loop
        }
    }
    

    【讨论】:

    • 我不太明白标签的工作原理。所以我将所有按钮设置为某个标签,然后在动画中放入 for 循环?
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多