육식하는야채의 개발일지
article thumbnail

[4.3.2] 뒤로 가기 버튼 만들기

두 번째 화면에 Back 버튼을 만들어준다.

@IBAction 메소드를 추가 하려고 어시스턴트를 키면 오브젝트-C 코드들이 나열되어 있다.

이 코드들은 무엇일까? 왜 이렇게 보일까?

 

뷰 컨트롤러와 클래스의 관계

기본으로 생성된 뷰 컨트롤러는 UIViewController 클래스를 상속받은 ViewController라는 이름의 클래스가 미리 연결되어 있었다.

하지만 새롭게 추가하는 뷰 컨트롤러는 ViewController에 연결되어있는것이 아니라 UIViewController에 직접 연결되어 있는 상태이다.

 

기본 클래스인 UIViewController는 오브젝트-C 코드로 작성되어있기 때문에 위의 사진처럼 코드가 보이는 것이다.

ViewController는 UIViewController를 상속받은 커스텀 클래스이기 때문에 수정이 가능하지만

UIViewController 기본클래스이기 때문에 임의로 수정할 수 없다. 

따라서 새롭게 추가한 뷰 컨트롤러는 또 다른 커스텀 클래스를 정의하여 연결을 해주어야 한다.

 

커스텀 클래스를 정의해서 연결해주기

SecondViewController.swift파일을 생성한다.

 

import UIKit

class SecondViewController: UIViewController {
	
}

파일에 SecondViewController 클래스를 정의하는 코드를 작성한다.

UIViewController를 상속받는 SecondViewController 클래스를 정의

 

뷰 컨트롤러 인스펙터에서 커스텀 클래스를 지정해준다.

어시스턴트에 아까 작성한 파일의 내용이 뜨는 것을 볼 수 있다

 

import UIKit

class SecondViewController: UIViewController {
	
	
	@IBAction func back(_ sender: UIButton) {
		self.presentingViewController?.dismiss(animated: true)
	}
}

@IBAction 메소드를 연결하고 dismiss메소드를 호출한다.

 

presenting/ presented

여기서 presentingViewController 와 presentedViewController 둘 다 dismiss 메소드를 호출할 수 있는데 차이점이 있다.

  • presentingViewController: 현재 뷰 컨트롤러 표시한 뷰 컨트롤러를 가리킴.
  • presentedViewController: 현재 뷰 컨트롤러 표시한 뷰 컨트롤러를 가리킴.

예를 들어 A가 present로 B를 띄우고, B에서 present로 C를 띄우면 

B의 presentedViewController는 C

B의 presentingViewController는 A가 된다.

 

첫 번째 화면에서 버튼을 눌러 두 번째 뷰 컨트롤러를 present를 통해 표시한 후, 두 번째 뷰 컨트롤러에서 dismiss를 사용하려고 한다면, presentingViewController를 사용해야 한다.

이유는 두 번째 뷰 컨트롤러를 표시한 첫 번째 뷰 컨트롤러가 해제(dismiss)되어야 하기 때문이다.

 

 

실행 결과

profile

육식하는야채의 개발일지

@육식하는야채

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!