본문 바로가기
ios 뽀개기/ios앱

14 ios 스위프트 네비게이션 바

by 인생여희 2017. 11. 27.
반응형

14 ios 스위프트 네비게이션 바



viewcontroller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//
//  ViewController.swift
//  Navigation
//
//  Created by MacBookPro on 2017. 11. 27..
//  Copyright © 2017년 MacBookPro. All rights reserved.
//
 
import UIKit
 
class ViewController: UIViewController,EditDelegate {
 
    let imgOn = UIImage(named: "on.jpg")
    let imgOff = UIImage(named: "off.jpg")
    var isOn = true
    
    @IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var txMessage: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imgView.image = imgOn
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
    //세그웨이를 이용해서 화면 전환
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        //세그웨이의 도착 컨트롤러를 editviewcontroller형태를 가지는 segue.destination viewcontroller로 선언한다. 그리고 세그웨이의 아이디에 따라 다르게 동작하도록 if문을 사용한다.
        
        
        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
        
    }
    
    //프로토콜에서 정의한 함수: editviewcontroller 에서 함수를 호출하며 메인 화면에 텍스트 필드에 보여줌
    func didMessageEditDone(_ controller: EditViewController, message: String) {
        //즉, 수정화면의 데이터를 메인화면의 데이터로 전달
        
        txMessage.text = message
    }
    
    
    //전구 이미지 값 세팅
    func didImageOnOff(_ controller: EditViewController, isOn: Bool) {
        
        if isOn {
            imgView.image = imgOn
        }else {
            
            imgView.image = imgOff
            self.isOn = false
            
        }
    }
    
}
 
 
cs



editviewcontroller

//

//  EditViewController.swift

//  Navigation

//

//  Created by MacBookPro on 2017. 11. 27..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


//프로토콜 형태의 델리게이트 추가

//프로토콜이란 특정 객체가 갖추어야 할 기능이나 속성에 대한 설계도

//형태만 있을 뿐 실질적인 내용은 프로토콜을 이용하는 객체에서 정의 한다.

//예

/*

protocol Calculator {

    

    func add(op1:Int, op2:Int) -> Int {

    

        return op1 + op2

    }

    

    

    func sub(op1:Int, op2:Int) -> Int {

    

        return op1 - op2

    }

}

*/


//프로토콜 선언

protocol EditDelegate {

    //수정화면의 메시지를 메인화면으로 보내기 위한 함수

    func didMessageEditDone(_ controller: EditViewController, message: String)

    

    //수정화면의 스위치 상태를 메인화면으로 보내기 위해 함수 추가

    func didImageOnOff(_ controller: EditViewController, isOn:Bool)

}

    

//프로토콜을 상속받으면 프로토콜에서 정의한 함수를 무조건 만들어야 한다.

class EditViewController: UIViewController {

    

    var isOn = false

    

    @IBOutlet weak var swOnBtn: UISwitch!

   

    

    var delegate : EditDelegate?

    

    //수정화면의 텍스트 필드

    @IBOutlet weak var txMessage: UITextField!

    

    var textWayValue: String = ""

   

    //수정화면에서 직접 텍스트 필드를 제어할 수 없기 때문에 변수 선언

    var textMessage: String = ""

    

    //수정화면 라벨

    @IBOutlet weak var lbWay: UILabel!

    

    //view 화면

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //수정화면의 라벨

        lbWay.text = textWayValue

        

        //수정화면의 텍스트 필드

        txMessage.text = textMessage

        swOnBtn.isOn = isOn

    

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    


    //수정화면에서 완료 버튼을 눌렀을 때

    @IBAction func btnDone(_ sender: UIButton) {

        

        // didmessageedit함수 호출하면 수정화면의 텍스트 필드 내용을 메인화면으로 전달

        if delegate != nil {

            

            delegate?.didMessageEditDone(self, message: txMessage.text!)

            delegate?.didImageOnOff(self, isOn: isOn)

        }

        

        //세그웨이를 추가할 때는 show이고 되돌아 갈때는 pop의 형태로 해야 한다.

        _ = navigationController?.popViewController(animated: true)

        

    }

    

    //전구 켜고 끄기

    @IBAction func swImageOnOff(_ sender: UISwitch) {

        

        if sender.isOn {

            

            isOn = true

        }else {

            

            isOn = false

        }

        

    }

    /*

    // MARK: - Navigation


    // In a storyboard-based application, you will often want to do a little preparation before navigation

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // Get the new view controller using segue.destinationViewController.

        // Pass the selected object to the new view controller.

    }

    */


}


반응형

댓글