프로젝트 만들어보기

[iOS] LED전광판 만들기 (ViewController끼리 데이터 전달하기 -Segue,Navigation Controller)

데브킹덕 2022. 10. 4. 14:38

 

결과

Segue를 이용해 push로 연결한 ViewController로 전광판 만들기 실습을 따라해 봄

 

delegate를 이용해 프로토콜을 채택하여 pop을 할때 데이터를 전달하는 방법에 대해 배울 수 있었고,

(segue로 연결하였을 경우)prepare 메서드를 이용해 데이터를 전달하는 방법에 대해 배울 수 있었다.

 

 

Segue가 수행될 것임을 뷰 컨트롤러에 알린다고 정의 되어 있다. 

첫번째 파라미터는 segue에 관련된 ViewController에 대한 정보를 포함한 segue 개체임

두번째 파라미터는 segue를 시작하는 개체임

 

segue는 여러 소스에서 트리거될 수 있으므로 segue및 sender매개변수의 정보를 사용하여 앱의 서로 다른 논리적 경로를 명확하게 구분할 수 있음

 

 

//
//  OLEDViewController.swift
//  LEDBoard
//
//  Created by duck on 2022/10/04.
//

import UIKit

class OLEDViewController: UIViewController, SettingOLEDOption{
    func settingOptionsOLED(text: String?, oledTextColor: UIColor, bgColor: UIColor) {
        self.ledText.textColor = oledTextColor
        self.view.backgroundColor = bgColor
        self.ledText.text = text
    }
    

    @IBOutlet weak var ledText: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.ledText.textColor = .orange
         }
    
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let viewController = segue.destination as? OLEDSettingViewController{
            
            viewController.delegate = self
            viewController.ledText = self.ledText.text
            viewController.oledTextColor = self.ledText.textColor
            viewController.bgColor = self.view.backgroundColor ?? .black
        }
    }
}

 

//
//  OLEDSettingViewController.swift
//  LEDBoard
//
//  Created by duck on 2022/10/04.
//

import UIKit


protocol SettingOLEDOption: AnyObject{
    func settingOptionsOLED(text: String?, oledTextColor: UIColor, bgColor: UIColor)
}

class OLEDSettingViewController: UIViewController {
    
    
    //MARK: - IBOutlet
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var blackTextColor: UIButton!
    @IBOutlet weak var blueTextColor: UIButton!
    @IBOutlet weak var greenTextColor: UIButton!
    @IBOutlet weak var orangeBGColor: UIButton!
    @IBOutlet weak var purpleBGColor: UIButton!
    @IBOutlet weak var yellowBGColor: UIButton!
    
    
    
    var ledText: String?
    var oledTextColor: UIColor = .orange
    var bgColor: UIColor = . black
    var delegate: SettingOLEDOption?
    
    private func configure(){
        if let ledText = ledText {
            self.textField.text = ledText
        }
        self.textColorAlpha(color: self.oledTextColor)
        self.bgColorAlpha(color: self.bgColor)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.configure()
    }
    
    
    @IBAction func bGColor(_ sender: UIButton) {
        if sender == orangeBGColor{
            bgColorAlpha(color: .orange)
            self.bgColor = .orange
        }else if sender == purpleBGColor{
            bgColorAlpha(color: .purple)
            self.bgColor = .purple
        }else if sender == yellowBGColor{
            bgColorAlpha(color: .yellow)
            self.bgColor = .yellow
        }
        
    }
    
    @IBAction func textColor(_ sender: UIButton) {
        if sender == blackTextColor{
            textColorAlpha(color: .black)
            self.oledTextColor = .black
        }else if sender == blueTextColor{
            textColorAlpha(color: .blue)
            self.oledTextColor = .blue
        }else if sender == greenTextColor{
            textColorAlpha(color: .green)
            self.oledTextColor = .green
            
        }
    }
    
    @IBAction func settingCompleteButton(_ sender: UIButton) {
        self.delegate?.settingOptionsOLED(text: self.textField.text, oledTextColor: self.oledTextColor, bgColor: self.bgColor)
        self.navigationController?.popViewController(animated: true)
    }
    

    
     private func textColorAlpha(color: UIColor){
        self.blackTextColor.alpha = color == UIColor.black ? 1.0 : 0.2
        self.blueTextColor.alpha = color == UIColor.blue ? 1.0 : 0.2
        self.greenTextColor.alpha = color == UIColor.green ? 1.0 : 0.2
    }
     private func bgColorAlpha(color: UIColor){
        self.orangeBGColor.alpha = color == UIColor.orange ? 1.0 : 0.2
        self.purpleBGColor.alpha = color == UIColor.purple ? 1.0 : 0.2
        self.yellowBGColor.alpha = color == UIColor.yellow ? 1.0 : 0.2
    }
    
    
    
}