본문 바로가기
개린이 이야기

2022년 03월 05일의 이야기

by iOS 개린이 2022. 3. 5.

1. 멀티 스크린 앱용 Segues 및 탐색

 

-cocoa touch class는 애플UIKit와 전체 무리를 포함하는 프레임 워크를 말한다. //지난 시간 우리가 직접 UIKit를 수입해오고, UIViewController class를 가져오고, viewDidLoad( )를 직접 작성한 것들이 존재하는 프레임 워크다.

-메인스토리보드의 두 번째 화면과 결과 뷰 컨트롤러를 연결시키기 위해서 두 번째 화면의 뷰 컨트롤러를 누르고, 신원조사관을 눌러 class를 ResultViewController로 변경해준다.  

 

-컨트롤을 누르고 refactor -> rename으로 이름을 변경할 수 있다.

 

-지난 시간에는 self.present를 통해 화면 전환을 이루었지만 메인 스토리 보드에서 컨트롤을 누른채 뷰 컨트롤러에서 다음 뷰 컨트롤러로 연결시킨 후 present Modally를 누르면 더 쉽게 화면 전환을 이룰 수 있다. 또한 화면 전환할 때 애니메이션을 넣을 수 있다. segue를 나타내는 작은 화살표를 선택한 다음 특성 검사기에서 전환 유형 중 마음에 드는 한 가지를 선택하면 가능하다.

 

-segue를 사용하기 위해서 UIViewController의 performSegue( ) 메서드를 이용한다.

 ex) self.performSugue( withIdentifier: string, sender: self )

 

-override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

             if segue.identifier == " goToResult " {                                                         1번 주석

                   let destinationVC = segue.destination as! ResultViewController                 2번 주석 

                   destinationVC.bmiValue = bmiValue}}

   

1번 주석: 더 많은 화면이 존재한다고 할 때 맞는 세그웨이를 찾아서 화면을 전환시켜야 하기 때문에 세그웨이 식별자가 일치한지 조건문을 사용한다.

 

2번 주석: destinationVC가 목적지의 ResultViewController 클래스를 캐스팅해야 ResultViewController 내에 만들어둔 변수 bmiValue를 통해 계산 결과를 내보낼 수 있기 때문이다. destinationVC와 segue.destination의 대상은 UIViewController이지만 변수 bmiValue는 resultviewcontroller이기 때문이다. 해결방법은 let destinationVC = segue.destination as! ResultViewController로 바꿔 주는 것이다. 여기서 as는 결과뷰컨트롤러로 다운 캐스팅 하겠다는 의미이다.

 

-계산 결과를 확인하고, 다시 이전 화면으로 되돌릴 수 있도록 self.dismiss(animated: true, completion: nil)을 사용한다.  여기서 컴플리션은 우리가 완료한 후에 아무일도 발생하지 않도록, nil로 설정한 것이다. 

 

2. 계산기 만들기를 통해 mvc채택 

-모델 안에 새로운 파일로 calculatorBrain을 만들고, calculatorBrain 구조체를 만들었다.

-calculatorBrain 구조체 안에 bmi 계산 함수와 segue를 통해서 목적지로 가는 값을 bmi 계산 함수의 결과값으로 넣었다. 

-

 

 

 

'개린이 이야기' 카테고리의 다른 글

2022년 03월 10일의 이야기  (0) 2022.03.11
2022년 03월 07일의 이야기  (0) 2022.03.07
2022년 03월 04일의 이야기  (0) 2022.03.04
2022년 03월 03일의 이야기  (0) 2022.03.03
2022년 02월 28일의 이야기  (0) 2022.02.28