네비게이션을 활용한 간단한 예제를 만들어 보았다.
상단의 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
}
}