Chap.04 화면전환 -4.4 Navigation

Woong·2022년 4월 28일
0

네비게이션 컨트롤러는 뷰 컨트롤러의 특별한 종류로 계층적인 성격을 띠는 콘텐츠 구조를 관리하기 위한 컨트롤러임.


*위 그림에 빨간색으로 표기된 부분을 '루트 뷰 컨트롤러'라고 부른다.

내비게이션 컨트롤러 객체의 메소드를 사용하면 스택의 정보를 수정 할 수 있다.
기본적으로 스택의 최상위에 뷰 컨트롤러를 추가할 때는

pushViewController(_:animated:)

메소드를 사용한다.

반대로 스택의 최상위 뷰 컨트롤러를 제거할 때에는 아래를 사용해주면 된다.

popViewController(animated:)

몰라 이게뭔데 어떻게씀? embed In으로 만들래 걍



  1. Embed In 해서 위랑 똑같이 만들어줘라
  2. 그리고 BarbuttonItem 을 ViewCon의 Action부에 연결시켜보라.
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

@IBAction func moveByNavis(_ sender: Any) {
    
    // 두번째 뷰 컨트롤러 인스턴스를 가져온다.
    
    guard let uvc = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") else {
        return
    }
    
    // 화면을 전환한다.
    
    self.navigationController?.pushViewController(uvc, animated: true)
	}    
}

// 두번째 뷰 컨트롤러 인스턴스를 가져온다.

        guard let uvc = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") else {
        return
    }

스토리보드에서 설정했던 identify를 이용해서 "Second VC"뷰컨트롤러를 가져오는 거임.
instantiateViewController를 메소드를 호출해서 뷰컨의 인스턴스를 받아온 다음. 옵셔널을 해제하기 위해서 uvc에 바인딩함.

// 화면을 전환한다.

self.navigationController?.pushViewController(uvc, animated: true)

화면 전환을 처리하는 부분임.
pushViewController는 아까 스택 최상위에 뷰 컨 uvc를 추가하는 것이지만,
사용자의 언어로 봤을때는 화면을 전환하는 결과가 일어남!!!

이거 실행하면 화면 왔다갔다 할 수 있음. 다시 돌아갈 수도 있음 segue생성해서 왔다갔다 하는거랑 똑같이 생성됨.(내비게이션 바는 자동으로 생성됨!!)

만약, 이상황에서 movePresent 메소드를 사용해서 이동하면 내비게이션 바가 추가될 것인가?

    @IBAction func movePresent(_ sender: UIButton) {
    
    guard let uvc = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC") else {
        return
    }
    self.present(uvc, animated: false)
}

위에처럼 내비게이션 바는 없어진 채로 나옴!!!

내비게이션 바버튼아이템으로 이동하면 다음페이지에서도 내비게이션바가 보이게되지만, 일반 버튼을 사용하게되면 내비게이션바가 표기되지 않는다. 동일한 뷰컨트롤러임에도 화면 전환방식에 따라서 내비게이션 컨트롤러의 제어하에 놓이기도 하고 그렇지 않기도 하다는 점!!

profile
https://github.com/iOS-Woong

0개의 댓글