[iOS/Swift] 화면 이동과 데이터 전달 방식

최정은·2023년 8월 25일
0

Swift

목록 보기
14/27

다음 화면으로 이동하는 네 가지 방식을 알아보자!
1) 코드로 화면 이동 (다음화면이 코드로 작성되어있을때만 가능한 방법)
2) 코드로 스토리보드 객체를 생성해서, 화면 이동
3) 스토리보드에서의 화면 이동(간접 세그웨이)
4) 스토리보드의 버튼에서의 화면 이동(직접 세그웨이)

1) 코드로 화면 이동

  • 다음화면이 코드로 작성되어 있을때만 가능한 방법이다.

생성한 viewController를 객체로 만들어 사용한다. 코드로 생성하면 생성된 Label에 바로 접근할 수 있지만 그렇게 사용하지 않고, 따로 변수를 생성해서 전달하는 방법을 사용하는 것이 좋다. 보통 데이터를 전달할 때는 클래스나 구조체로를 전달하는 경우가 많다.

2) 코드로 스토리보드 객체를 생성해서, 화면 이동

스토리보드로 만들면 객체에서 mainLabel을 불러올 수 없는 이유는?
ㄴ 메모리에 아직 올라가지 않았다면서 에러가 발생함 (nil)

  • 코드로 만드는 건 모든 저장 속성이 한번에 메모리에 올라가는데, 스토리보드로 만들면 아래와 같은 순서로 진행됨
    1) 코드로 된 뷰컨트롤러가 메모리에 올라감
    2) 스토리보드가 메모리에 올라감
    3) 코드랑 스토리보드랑 연결하는 과정을 거침 (viewDidLoad는 스토리보드가 연결하는 과정을 거친 후 호출되는 함수)

  • withIdentifier 입력할 때 생성한 스토리보드 ID에도 동일하게 설정해야 된다! (오타나면 안됨!)

  • instantiateViewController 의 return 타입이 ViewController 라서 타입캐스팅을 해줘야된다!

3) 스토리보드에서의 화면 이동(간접 세그웨이)

  • 출발지의 상단의 view Controller를 잡고 도착지의 연결해준다! 그럼 아래와 같이 선이 생성되는 이것을 세그웨이라고 한다.

세그웨이는 화면이동을 담당하는 객체이다.

  • source - 근원지
  • destination - 종착지
  • identifier - 식별자 (세그웨이를 판별하기 위한 문자열)

화면으로 이동하려면 performSegue을 실행시킴으로써 세그웨이를 활성화시켜 줘야한다. 데이터를 전달할 때는 prepare 라는 함수에서 전달시켜줘야 한다.

performSegue를 실행시키면 자동으로 prepare를 호출된다. 그래서 이 함수의 재정의를 통해서 데이터를 전달할 수 있다.

4) 스토리보드의 버튼에서의 화면 이동(직접 세그웨이)

버튼으로 바로 스토리보드 연결하면 자동으로 performSegue를 실행하는 것처럼 세그웨이가 활성화 되어서 따로 코드를 칠 필요가 없는데, 간접 세그웨이에서 performSegue를 실행시킬 지 말지 결정하는 것처럼 직접 세그웨이는 shouldPerformSegue에서 조건문을 추가하면된다.

shouldPerformSegue 함수는 직접적인 세그웨이를 만들었을 때만 실행되며, 함수 내에서 조건문을 추가하여 세그웨이를 활성화시킬지 말지 결정할 수 있다.

0개의 댓글