iOS

ViewController의 화면 전환

KangChangHyeok 2022. 7. 19. 00:25

대표적인 방법 4가지

 

 

ViewController의 view 바꿔치기

-메모리 overflow 위험이 있기 때문에 좋은 방법이 아니라고 한다.


ViewController가 다른 ViewController를 호출(present) 

-내가 가장 많이 쓰는 방법.

먼저 두개의 ViewController를 세팅하고 나같은 경우에는 각 뷰컨트롤러에 버튼을 만들어 firstVC에서는 아래의 코드를,

@IBAction func buttonTapped(_ sender: UIButton) {
        
        let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController
        guard let SecondVC = vc else {return}
        SecondVC.modalTransitionStyle = .coverVertical
        SecondVC.modalPresentationStyle = .fullScreen
        self.present(SecondVC, animated: true)
    }

secondVC에서는 dismiss함수를 활용하여 화면 전환을 구성해보았다.

@IBAction func buttonTapped(_ sender: UIButton) {
        self.dismiss(animated: true)
    }

 

 

버튼을 클릭하면 화면이 전환되는 것을 확인할 수 있다.

 


NavigationViewController 사용하여 화면 전환(push)

- 처음 rootViewController에 navigationController를 embed in 해주기

push할 뷰컨을 생성하고 push 해주기

let pushVC = self.storyboard?.instantiateViewController(withIdentifier: "NavigationPushViewController") as? NavigationPushViewController
        
        guard let navigationPushViewController = pushVC else {return}
        self.navigationController?.pushViewController(navigationPushViewController, animated: true)

아래와 같이 잘 실행된다. 내비게이션 컨트롤러는 stack에 쌓이는 방식이기 때문에 back 버튼이 자동으로 생성된다.

 

 

 


화면 전환용 객체 Segue 사용

segue를 사용하게 되면 스토리보드상에서 경로가 시각적으로 나타난다.

segue에도 종류가 있음.

  • 액션 세그웨이 - 버튼, 테이블 셀 등 이벤트 트리거에 자동으로 연결
  • 메뉴얼 세그웨이 - 출발점이 뷰 컨트롤러 자체인 경우, performSegue(withldentifier:sender:) 메소드를 적절한 시점에 호출해 화면 전환

segue의 방식 

  • Show: 일반적으로 사용하는 방식, push pop 내비게이션 영역에 스택처럼 쌓인다, 새 화면이 원래 화면을 덮는다, 직전 뷰로 돌아가는 버튼 제공, 내비게이션 컨트롤러를 사용하지 않으면 present modally
  • Show Detail: 아이폰에서는 똑같이 보이지만 아이패드에서 splitView에서 사용한다, view간 수직적 계층이 생긴다(master-datail)
  • Present Modally: 일시적으로 강조하고 싶은 화면을 보여줄 때(일반적인 모달)
  • Present As Popover: 아이패드 팝업창
  • Custom: 사용자 정의

 

액션 세그웨이

-이벤트 트리거(ex uibutton)을 선택한 상태에서 전환할 뷰 컨트롤러에 컨트롤키를 누른 상태에서 드래그 앤 드랍

-아주 간단하게 코드 없이도 화면 전환을 구현할 수 있다.

 

 

매뉴얼 세그웨이

뷰 컨트롤러 끼리 segue를 지정하고 performSegue메서드를 활용하여 화면 전환을 구현하고 싶은곳에 직접 구현하는 방식

 

@IBAction func manualSegueTapped(_ sender: UIButton) {
        
        self.performSegue(withIdentifier: "ToSecondVC", sender: self)
    }

뷰컨트롤러 끼리 segue를 설정하고, button이 tapped되었을때의 ibaction메서드 안에 performSegue함수를 이용하여 화면 전환

 

performSegue함수의 withIdentifier 식별자는

요런식으로 해당 segue를 눌렀을때 xcode 화면 우측에서 설정해주면 된다.

 

 

잘 실행된다 ^^

'iOS' 카테고리의 다른 글

iOS - App life cycle에 대해  (0) 2022.07.13