繁体   English   中英

Swift 为 UIButton 和 UIView 创建通用扩展

[英]Swift create a common extension for UIButton and UIView Color change

就我而言,我正在尝试创建多个buttons 在这里,每个按钮放置在单独的 UIView 上。 这个按钮就像一个基于选择的单个部分它的标题颜色和UIView颜色我在每个按钮操作方法中进行更改。 在这里,我需要为所有按钮标题和 UIView 颜色变化创建一个通用扩展。 一次,按钮单击需要将值传递给扩展或 function 以更改 colors 为selection按钮。 这是我正在尝试减少代码重复和 LOC。

NOTE:下面我只发布了一个按钮代码,但我有很多按钮。 我想让它成为常见的 class 并传递值来更改 colors。 如何做到这一点?

第一个按钮操作

 @IBAction func firstButtonClick(_ sender: Any) {
        self.onetimeView.backgroundColor =  colorLiteral(red: 0.184337255, green: 0.683529412, blue: 0.976475882, alpha: 1)
        self.dailyView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        self.weeklyView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        self.fiftydaysView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        self.monthlyView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)

        self.onetimeButton.setTitleColor(UIColor.selectedColor, for: .normal)
        self.dailyButton.setTitleColor(UIColor.disabledColor, for: .normal)
        self.weeklyButton.setTitleColor(UIColor.disabledColor, for: .normal)
        self.fiftydaysButton.setTitleColor(UIColor.disabledColor, for: .normal)
        self.monthlyButton.setTitleColor(UIColor.disabledColor, for: .normal)
    }

@IBAction func secondButtonClick(_ sender: Any) {
       self.onetimeView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
       self.dailyView.backgroundColor =  colorLiteral(red: 0.184337255, green: 0.683529412, blue: 0.976475882, alpha: 1)
       self.weeklyView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
       self.fiftydaysView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
       self.monthlyView.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)

       self.onetimeButton.setTitleColor(UIColor.disabledColor, for: .normal)
       self.dailyButton.setTitleColor(UIColor.selectedColor, for: .normal)
       self.weeklyButton.setTitleColor(UIColor.disabledColor, for: .normal)
       self.fiftydaysButton.setTitleColor(UIColor.disabledColor, for: .normal)
       self.monthlyButton.setTitleColor(UIColor.disabledColor, for: .normal)
    }

extension UIColor {
    static var selectedColor = UIColor.init(red: 47/255, green: 174/255, blue: 248/255, alpha: 1)
    static var disabledColor = UIColor.init(red: 170/255, green: 170/255, blue: 170/255, alpha: 1)
}

您可以创建一个子类,如:

class 主按钮:UIButton { }

将您的按钮和视图存储在某种数据结构中并对其进行迭代。 创建一个 function,它将在作为参数传递的视图上设置selectedColor并在 rest 上设置disabledColor

typealias Section = (UIButton, UIView)

let sections: [Section] = [
    (button: onetimeButton, view: onetimeView),
    (button: dailyButton, view: dailyView),
    (button: weeklyButton, view: weeklyView),
    (button: fiftydaysButton, view: fiftydaysView),
    (button: monthlyButton, view: monthlyView),
]

func select(_ section: Section) {
    sections.forEach { (section) in
        section.0.setTitleColor(UIColor.disabledColor, for: .normal)
        section.1.backgroundColor = UIColor.disabledColor
    }

    section.0.setTitleColor(UIColor.selectedColor, for: .normal)
    section.1.backgroundColor = UIColor.selectedColor
}

// in UIButton click call
select((onetimeButton, onetimeView))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM