지난번에 ViewController
간 뷰와 데이터를 이동하는 방법 중 segue
를 이용하는 것에 대해 포스팅했었는데요.
오늘은 스토리보드에서 각 뷰의 id값만 지정하고, 그 외 모든 것을 programmatically 하게 하는 방식에 대해 알아보겠습니다.
현업 개발자가 아니라 실제 협업 시 어떤 방식이 더 많이 쓰이는 지는 잘 모르겠습니다만, 개인적으로는 후자의 방식이 더 편리한 것 같았습니다.
작업 순서
- 스토리보드에서 2개의 뷰 생성 후 ID값 부여
- 각각의 뷰에 버튼과 레이블 생성 (데이터 이동 확인용)
- 초기 뷰에서 코딩
먼저, 아래 그림과 같이 스토리보드에서 2개의 뷰컨트롤러를 각각 생성하고 id값에 원하는 값을 지정합니다.
동작 방식은 이렇습니다.
초기 뷰에서 버튼을 누르면, 다음 뷰로 넘어가고, 다음 뷰의 레이블에 초기뷰의 버튼 텍스트가 입혀집니다. 두번째 뷰의 버튼을 누르면 두번째 뷰가 닫히면서 초기 뷰로 돌아갑니다.
각 뷰의 스위프트 파일을 보시면 다음과 같습니다.
FirstViewController
class FirstViewController: UIViewController {
@IBOutlet var btnFirst: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnFirstClicked(_ sender: UIButton) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier: "secondVC") as! SecondViewController
vc.dataReceived = btnFirst.currentTitle
self.present(vc, animated: true, completion: nil)
}
}
SecondViewController.swift
class eraseViewController: UIViewController {
@IBOutlet var btnSecond: UIButton!
@IBOutlet var lblSecond: UILabel!
var dataReceived: String = ""
override func viewDidLoad() {
super.viewDidLoad()
lblSecond.text = dataReceived
}
@IBAction func btnSecondClicked(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
}
위와 같이 작업 시, 스토리보드에서 별도의 show 설정 없이도 뷰 간 이동 및 데이터 이동이 되는 것을 볼 수 있습니다.
제 느낌으로는 훨씬 더 직관적이고, 또 안드로이드의 intent
와도 유사한 방식으로 작동하는 것 같아 더 익숙하다는 느낌이 들었습니다.
또 이렇게 하는 방식은 프로토콜로 데이터를 주고받을 때도 매우 편리한데요. 일석이조의 느낌같다고나 할까요?
다음에는 이러한 상황에서, protocol
과 delegate
를 이용해서 데이터를 주고 받는 방법에 대해 포스팅해보겠습니다.
'Developer > iOS, Swift' 카테고리의 다른 글
[Swift] 네이버 장소검색(search Place) API 사용하기 (2) | 2019.11.17 |
---|---|
[Swift] Protocol과 delegate를 이용하여 뷰 간 데이터 전달하기 (271) | 2019.11.10 |
[iOS] 탭바 컨트롤러의 이미지 사이즈/색상은? (253) | 2019.08.25 |
[iOS] 탭바 Tab Bar Controller 사용하기 (feat. 안드로이드 Bottom Navigation View) (285) | 2019.08.25 |
[iOS] Segue로 화면 간 데이터 전달하기 (Feat. 안드로이드 Intent) (245) | 2019.08.20 |
댓글