[iOS 정면돌파] 02. 코드로 Navigation Controller 조작하기

H43RO·2021년 8월 13일
0

iOS 정면돌파

목록 보기
2/5
post-thumbnail

해당 포스팅은 이전 포스팅과 내용이 이어집니다.

오늘은 Navigation Controller 를 프로그래매틱 하게 조작하는 방법을 익혀보았다. 기본적으로 스택 자료구조의 기본 개념이 기반이기 때문에, 프로그래매틱하게 구현하여도 동작이 직관적인 것 같다.

Goal : 기본 Navigation Controller 없이 페이지 뒤로가기 구현하기

1. View Controller 로 Outlet 변수와 Action 메소드 연결하기

  1. @IBOutlet 연결
  • UI 컴포넌트를 선택하고 control 키를 누른 채 View Controller 로 드래그앤 드랍
  • @IBOutlet 으로 선언한 뒤 변수명 지정 후 완료
  1. @IBAction 연결
  • 같은 방법으로 View Controller 로 드래그앤 드랍
  • @IBAction 을 선택하고, 타입을 UIButton 으로 지정하여 메소드명 지정 후 완료
  • 이벤트는 그대로 냅둠 (기본 값 : 터치 이벤트)

위 과정을 거치게 되면, 해당 컴포넌트를 '클릭' 했을 때, 위에서 선언한 메소드가 호출된다.
따라서 아래와 같이 메소드를 만들게 되면, print 문이 실행되어 문구가 로그에 출력된다.

@IBAction func onLoginButtonClicked(_ sender: UIButton) {
    print("RegisterViewController - onLoginViewControllerButtonClicked() called / 로그인 버튼 클릭")
}

2. Navigation Controller 조작하기

  1. 기본 제공되는 Navigation Controller 를 없애는 방법은 다음과 같다.
    해당 View Controller 의 viewDidLoad() 내부에 아래 구문을 선언해준다.
override func viewDidLoad() {
		super.viewDidLoad()
		
		// 상단 네비게이션 바 부분을 숨김 처리
		self.navigationController?.isNavigationBarHidden = true
}
  1. 아까 연결한 Action 메소드에 다음 구문을 추가하여,
    버튼이 눌렸을 때 View Controller 를 팝할 수 있도록 한다.
@IBAction func onLoginButtonClicked(_ sender: UIButton) {
    print("RegisterViewController - onLoginViewControllerButtonClicked() called / 로그인 버튼 클릭")
    
    // 네비게이션 뷰 컨트롤러를 팝 하면 로그인 화면이 나오게 됨
    self.navigationController?.popViewController(animated: true)
}

이렇게 하면, 버튼을 눌렀을 때 Navigation Controller 스택에서 '회원가입' 뷰를 팝 하는 것이기 때문에
이전 페이지였던 '로그인' 뷰가 화면에 보이게 된다.

오늘 배운 것

  • UI 컴포넌트를 View Controller 와 연결하여 이벤트 콜백 리스너를 생성하는 방법
  • Navigation Controller 를 프로그래매틱하게 조작하는 방법
profile
어려울수록 기본에 미치고 열광하라

0개의 댓글