[공식문서로 iOS 배우기] UIKit Tutorial - 6. Modality

Updated:

  • 공식 자료를 학습하고 정리했으며 잘못된 정보가 있을 수 있습니다.
  • 문서의 단순 번역은 경어체를, 직접 작성한 내용은 평어체를 사용합니다.
  • 원문: Apple Developer - iOS App Dev Tutorials - UIKit
  • GitHub에서 보기

📌 메모

배운 내용이나 메모는 소제목에 압정(📌) 이모지를 표시하여 작성하고 이곳에 링크합니다.




Chapter 6. Modality

Modal view에서 작업을 분리하고 새 미리 알림을 저장합니다.

Creating New Reminders

Modality는 사용자의 독립적인 작업에 집중하고 사용자가 중요한 정보를 수신하고 필요한 경우 행동하도록 보장합니다.

이 튜토리얼에서는 미리 알림을 추가하는 기능을 구축하기 시작합니다. Interface Builder를 사용하여 미리 알림 목록 화면에 Add 버튼을 추가합니다. Modal view로 새 미리 알림을 만드는 화면을 표시하는 동안에, view controller를 프로그래밍적으로 만들고 표시하는 방법을 배웁니다.

1. Configure a Toolbar

이 섹션에서는 Today 앱에서 새 미리 알림을 추가할 수 있는 UI를 만듭니다. 미리 알림 목록 화면에 toolbar와 버튼을 추가합니다. 그리고 viewDidAppear(_:) 메서드를 override하여 detail 화면에서는 toolbar를 숨깁니다.

📌 Navigation Controller의 Toolbar

Step 1

Navigation controllers manage an optional toolbar at the bottom of the screen.

Navigation Controller는 toolbar를 옵셔널로 지원하므로 Attributes inspector에서 옵션 체크박스를 선택하는 것만으로 간단히 toolbar를 추가할 수 있다.

2. Present a View Controller Modally

사용자가 미리 알림 목록의 한 행을 탭 하면 navigation controller는 detail controller은 현재 화면에 push합니다. 그러나 새 미리 알림을 만드는 것은 자족적인 task입니다. Modal Presentation은 navigation 구조 밖으로 task를 분리하여 사용자가 자족적인 task에 집중하게 합니다.

사용자가 새 미리 알림을 만들기 위해 Add 버튼을 탭할 때 deatil controller를 modally하게 띄웁니다.

3. Configure the Add Reminder Action

현재 미리 알림 detail 화면에서 기존 미리 알림을 보거나 편집할 수 있습니다. View controller에 isNew Boolean 프로퍼티를 추가하여 미리 알림이 새로 만들어진 시기와 새 미리 알림을 처리할 reminderAddAction 클로저를 표시합니다.

이 프로퍼티에 값을 할당하는 configure 메서드를 업데이트한 후에 ReminderListViewController에서 메서드의 호출을 업데이트합니다.

4. Check Your Understanding

Q1. view가 나타날 때 애니메이션을 시작하는데 사용할 수 있는 view controller 메서드는 무엇인가요?

a. viewDidappear(_:)

Q2.

다음 코드 샘플에 한 줄의 코드를 추가할 때 화면의 밑에서 위로 슬라이딩하여 올라가는, ShoppingCartViewControoler을 modally하게 나타내는 코드는 무엇인가요?

@IBAction func viewCartPressed(_ sender: UIBarButtonItem) {
  let storyboard = UIStoryboard(name: "Main", bundle: nil)
  let cartController: ShoppingCartViewController = 
     storyboard.instantiateViewController(identifier: "ShoppingCartViewController")
  // your code here
}

A. present(cartController, animated: true)

Q3. 현재 메모리에 view가 로드되있음을 알려주는 view controller의 Boolean 값 프로퍼티는 무엇인가요?

A. isViewLoaded

Saving New Reminders

Today 앱의 실제로 사용하려면 사용자가 만든 미리 알림을 반드시 저장해야 합니다.

이 튜토리얼에서는 view controller와 data source를 업데이트하여 사용자가 만드는 새 미리 알림을 삽입합니다. 그런 다음 Xcode의 리팩토링 도구를 사용하여 앱에서 발전시킨 복잡한 data source 로직을 단순화할 수 있습니다.

1. Save Reminders to the Data Source

이 섹션에서는 앱의 미리 알림 추가 기능을 완성합니다. 현재 지원되는 보기 모드와 편집 모드에 추가로 새 미리 알림의 추가를 처리하도록 ReminderDetailViewController의 메서드를 수정하는 것으로 시작합니다. data source에 미리 알림을 삽입하는 메서드를 만든 다음에, addAction completion handler안에서 메서드를 호출합니다.

2. Refactor to Extract Methods

ReminderDetailViewController의 setEditing(:animated:) 메서드가 커졌습니다. setEditing(:animated:)에서 로직을 두 개의 메서드로 분리하여 추출하는 것으로 이 튜토리얼을 마칩니다. 한 메서드는 view mode를 전환하기 위한 것이고 또 다른 메서드는 edit mode로 전환합니다.

3. Check Your Understanding

Q1. 질문에 코드로 답하세요.

array[0]10과 같도록 array를 변경하는 코드는 무엇인가요?

A. array.insert(10, at: 0)

Q2. 질문에 코드로 답하세요.

currentNumber1을 할당하는 코드는 무엇인가요?

var tempNumber: Int? = nil
var defaultNumber: Int = 1

A. let currentNumber = tempNumber ?? defaultNumber

Q3. modal view controller을 dismiss하는 방법은 무엇인가요?

A. Call dismiss(animated:) on the presenting view controller

Leave a comment