스위프트 UI Button

Xcode ViewController에서, UIView와 UIButton을 활용하여 버튼을 만들고, 버튼에 색상을 입혀 On/Off 하며 색을 바꾸는 인터렉션을 만들어봅니다.

UIButton

01. 버튼 9개를 담을 [UIButton] 배열을 만든다.

02. 버튼을 만드는 함수 makeBtn()을 만든다.

03. 버튼의 Layout을 잡아주는 함수를 만든다.

var btnArr: [UIButton] = []
    
func makeBtn() {
    for index: Int in 0..<9 {
        let btn = UIButton()
        btn.tag = index
        self.view.addSubview(btn)
        btn.backgroundColor =  #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1)
        btn.layer.borderColor = UIColor.black.cgColor // borderColor = CGcolor
        btn.layer.borderWidth = 1
        btnArr.append(btn)
    }
}
    
func makeBtnLayout(btnArr: [UIButton]) {
    for btn in btnArr {
        let index = btn.tag
        let row = index / 3 // 0, 0, 0, 1, 1, 1, 2, 2, 2
        let column = index % 3 // 0, 1, 2, 0, 1, 2, 0, 1, 2
        
        let width = self.view.frame.size.width/3
        let height = self.view.frame.size.height/3
        btn.frame = CGRect(x: CGFloat(column)*width, y: CGFloat(row)*height, width: width, height: height)
        btn.addTarget(self, action: #selector(ViewController.switchColor), for: .touchUpInside)
    }
}

04. addTarget: SwitchColor Function

var tileCase = OnOff.on
    enum OnOff {
        case on
        case off
    }
    
    func changeColorA(_ sender: UIButton) {
        let tag = sender.tag
        if isEvenNumber(num: tag) {
            sender.backgroundColor = #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)
        }else {
            sender.backgroundColor = #colorLiteral(red: 1, green: 0.8193424344, blue: 0, alpha: 1)
        }
    }
    
    func changeColorB(_ sender: UIButton) {
        let tag = sender.tag
        if isEvenNumber(num: tag) {
            sender.backgroundColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)
        }else {
            sender.backgroundColor = #colorLiteral(red: 0.9818221927, green: 0.1470750272, blue: 1, alpha: 1)
        }
    }

    @objc func switchColor(_ sender: UIButton) {
        for btn in btnArr {
            switch tileCase {
            case .on:
                changeColorA(btn)
                tileCase = .off
            case .off:
                changeColorB(btn)
                tileCase = .on
            }
        }
    }
    
    func isEvenNumber(num: Int) -> Bool {
        if num%2 == 0 {
            return true
        }else {
            return false
        }
    }

05. ViewDidLoad() 이후 메소드 호출

 override func viewDidLoad() {
        super.viewDidLoad()
        makeBtn()
        makeBtnLayout(btnArr: btnArr)
    }