iOS/기본편 | 실전편 -꼼꼼한재은씨

UITextField/Steper/SwitchButton 만들기 (code)

글자줍기 2022. 1. 28. 15:44
반응형

 

ViewController에 스토리보드 연결없이 코드로만 작성

화면1 -> 화면2

import UIKit

class ViewController: UIViewController {
    
    var paramEmail: UITextField! // 이메일 입력필드
    var paramUpdate: UISwitch! // 스위치객체
    var paramInterval: UIStepper! //스테퍼
    // 출력용 레이블
    var txtUpdate: UILabel! // 스위치 컨트롤값 표현레이블
    var txtInterval : UILabel! // 스테퍼 컨트롤값 표현레이블

    override func viewDidLoad() {
        //1.네비게이션 바 타이틀을 입력한다.
        self.navigationItem.title = "설정"
    
        
        //2.이메일 레이블을 생성하고 영역과 기본 문구를 설정한다.
        let lblEmail = UILabel()
        lblEmail.frame = CGRect(x: 30, y: 100, width: 100, height: 30)
        lblEmail.text = "이메일"
        //3.레이블의 폰트를 설정한다.
        lblEmail.font = UIFont.systemFont(ofSize: 14)
        //4.레이블을 루트 뷰에 추가한다.
        self.view.addSubview(lblEmail)
        
        
        // 자동갱신 레이블을 생성하고 루트뷰에 추가한다.
        let lblUpdate = UILabel()
        lblUpdate.frame = CGRect(x: 30, y: 150, width: 100, height: 30)
        lblUpdate.text = "자동갱신"
        lblUpdate.font = UIFont.systemFont(ofSize: 14)
        self.view.addSubview(lblUpdate)
        
        
        // 갱신주기 레이블을 생성하고 루트뷰에 추가한다.
        let lblInterval = UILabel()
        lblInterval.frame = CGRect(x: 30, y: 200, width: 100, height: 30)
        lblInterval.text = "갱신주기"
        lblInterval.font = UIFont.systemFont(ofSize: 14)
        self.view.addSubview(lblInterval)
        
        
        // 이메일 입력을 위한 텍스트 필드를 추가한다.
        self.paramEmail = UITextField()
        self.paramEmail.frame = CGRect(x: 120, y: 100, width: 220, height: 30)
        self.paramEmail.font =  UIFont.systemFont(ofSize: 13)
        self.paramEmail.borderStyle = .roundedRect
        self.paramEmail.autocapitalizationType = .none // 대문자 자동변환기능 해제
        self.view.addSubview(self.paramEmail)
        
        
        //스위치 객체를 생성한다.
        self.paramUpdate = UISwitch()
        self.paramUpdate.frame = CGRect(x: 120, y: 150, width: 50, height: 30)
        //스위치가 On되어 있는 상태를 기본값으로 설정한다.
        self.paramUpdate.setOn(true, animated: true)
        self.view.addSubview(self.paramUpdate)
        
        
        // 갱신주기를 위한 스테퍼 추가
        self.paramInterval = UIStepper()
        self.paramInterval.frame = CGRect(x: 120, y: 200, width: 50, height: 30)
        self.paramInterval.minimumValue = 0 // 최소값
        self.paramInterval.maximumValue = 100 //최대값
        self.paramInterval.stepValue = 1 // 값변경단위
        self.paramInterval.value = 0 // 초기값 설정
        self.view.addSubview(self.paramInterval)
        
        // 스위치객체의 값을 표현할 레이블을 추가한다.
        self.txtUpdate = UILabel()
        
        self.txtUpdate.frame = CGRect(x: 250, y: 150, width: 100, height: 30)
        self.txtUpdate.font = UIFont.systemFont(ofSize: 12)
        self.txtUpdate.textColor = UIColor.red
        self.txtUpdate.text = "갱신함"
        self.view.addSubview(self.txtUpdate)
        
        // 스테퍼의 값을 텍스트로 표현할 레이블을 추가한다.
        self.txtInterval = UILabel()
        self.txtInterval.frame = CGRect(x: 250, y: 200, width: 100, height: 30)
        self.txtInterval.font = UIFont.systemFont(ofSize: 12)
        self.txtInterval.textColor = UIColor.red
        self.txtInterval.text = "0분마다" // 초기값
        self.view.addSubview(self.txtInterval)
        
        // 값변화 이벤트를 연결해줘야함
        self.paramUpdate.addTarget(self, action: #selector(presentUpdataValue(_:)), for: .valueChanged)
        
        self.paramInterval.addTarget(self, action: #selector(presentIntervalValue(_:)), for: .valueChanged)
        
        // 전송버튼을 내비게이션 아이템에 추가하고, submit메소드에 연결한다.
        let submitBtn = UIBarButtonItem(barButtonSystemItem: .compose, target: self, action: #selector(submit(_:)))
        self.navigationItem.rightBarButtonItem = submitBtn

    }
    
    // 스위치와 상호반응할 액션 메소드 / 값변화 이벤트를 연결해줘야함
    @objc func presentUpdataValue(_ sender: UISwitch){
        self.txtUpdate.text = (sender.isOn == true ? "갱신함" :"갱신하지않음")
    }
    
    // 스테퍼와 상호반응할 액션메소드 / 값변화 이벤트를 연결해줘야함
    @objc func presentIntervalValue(_ sender: UIStepper){
        // 스테퍼의 값을 받아서 출력한다.스테퍼컨트롤은 기본이실수형 -> 정수형으로 바꿔준다.Int생성자로 감싸줌
        self.txtInterval.text = ("\(Int(sender.value))분마다")
    }
    
    //전송버튼과 상호반응할 액션 메소드
    @objc func submit(_ sender:Any){
        let rvc = ReadViewController()
        rvc.pEmail = self.paramEmail.text
        rvc.pUpdate = self.paramUpdate.isOn
        rvc.pInterval = self.paramInterval.value
        
        self.navigationController?.pushViewController(rvc, animated: true)
    }
}

 

 버튼을 눌러서 다음장으로 데이터 전달하기 

import UIKit

class ReadViewController : UIViewController{
    
    // 전달된 값을 저장할 변수를 정의한다.
    var pEmail: String?
    var pUpdate: Bool?
    var pInterval: Double?
    
    override func viewDidLoad() {
        
        //배경 색상을 설정한다.
        self.view.backgroundColor = .white
        
        //레이블 객체를 정의한다.
        let email = UILabel()
        let update = UILabel()
        let interval = UILabel()
        
        // 위치와 영역을 정의한다.
        email.frame = CGRect(x: 50, y: 100, width: 300, height: 30)
        update.frame = CGRect(x: 50, y: 50, width: 300, height: 30)
        interval.frame = CGRect(x: 50, y: 200, width: 300, height: 30)
        
        //전달받은 값을 레이블에 표시한다.
        email.text = "전달받은 이메일: \(self.pEmail!)"
        update.text = "업데이트 여부 : \(self.pUpdate == true ? "업데이트함" : "업데이트 안함 ")"
        interval.text = "업데이트 주기: \(self.pInterval!)분마다"
        
        // 레이블을 루트뷰에 추가한다.
        self.view.addSubview(email)
        self.view.addSubview(update)
        self.view.addSubview(interval)
    }
}
반응형