[IOS]Navigation 네비게이션

이정찬·2022년 5월 24일
0

Storyboard개발일지

목록 보기
13/20

네비게이션을 활용한 간단한 예제를 만들어 보았다.

상단의 Editor -> Embed In -> Navigation Controller를 선택하여 네비게이션을 추가 하였다.

스토리보드 구성

오브잭트 옵션


오른쪽 수정화면에 연결할 class를 생성하고, 선택하였다.

메인화면 오른쪽 상단의 버튼의 Item을 수정하였다.

왼쪽의 스토리보드를 오른쪽으로 드래그하여 두번 연결하고, 각각 editBarButton과 editButton으로 설정하였다.

코드

메인화면과 연결된 ViewController.swift 코드

import UIKit

class ViewController: UIViewController, EditDelegate {
    
    let imgOn = UIImage(named: "lamp-On.jpeg")
    let imgOff = UIImage(named: "lamp-Off.jpeg")
    
    var isOn = true
    
    @IBOutlet var txMessage: UITextField!
    @IBOutlet var imgView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        imgView.image = imgOn
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let editViewController = segue.destination as! EditViewController
        if segue.identifier == "editButton" { //버튼을 클릭한 경우
            editViewController.textWayValue = "segue : use button"
        } else if segue.identifier == "editBarButton" { //바 버튼을 클릭한 경우
            editViewController.textWayValue = "segue : use Bar button"
        }
        
        //수정화면으로 텍스트 메시지와 전구 상태 전달
        editViewController.textMessage = txMessage.text!
        editViewController.isOn = isOn
        editViewController.delegate = self
    }
    
    //메시지 값을 텍스트 필드에 표시
    func didMessageEditDone(_ controller: EditViewController, message: String) {
        txMessage.text = message
    }
    
    //전구 이미지 값 세팅
    func didImageOnOffDone(_ controller: EditViewController, isOn: Bool) {
        if isOn {
            imgView.image = imgOn
            self.isOn = true
        } else {
            imgView.image = imgOff
            self.isOn = false
        }
    }
}

수정화면과 연결된 EditViewController.swift 코드

import UIKit

protocol EditDelegate {
    func didMessageEditDone(_ controller: EditViewController, message: String)
    func didImageOnOffDone(_ controller: EditViewController, isOn : Bool)
}

class EditViewController: UIViewController {
    
    var textWayValue: String = ""
    var textMessage: String = ""
    var delegate : EditDelegate?
    var isOn = false

    @IBOutlet var lblWay: UILabel!
    @IBOutlet var txMessage: UITextField!
    @IBOutlet var swIsOn: UISwitch!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        lblWay.text = textWayValue
        txMessage.text = textMessage
        swIsOn.isOn = isOn
    }

    @IBAction func btnDone(_ sender: UIButton) {
        // 메인화면으로 텍스트와 전구 이미지 상태 보내기
        if delegate != nil {
            delegate?.didMessageEditDone(self, message: txMessage.text!)
            delegate?.didImageOnOffDone(self, isOn: isOn)
        }
        
        //메인화면으로 이동하기
        _ = navigationController?.popViewController(animated: true)
    }
    
    //전구 켜고 끄기
    @IBAction func swImageOnOff(_ sender: UISwitch) {
        if sender.isOn {
            isOn = true
        } else {
            isOn = false
        }
    }

실행 결과

profile
오늘도 조금씩 성장하자

0개의 댓글