va95 2021. 2. 26. 22:54

학습 내용 

 

Alerts 와 Action Sheets

사용자에게 무엇인가를 요청할 수 있는 메커니즘은 크게 두가지가 있습니다.

Alerts와 ActionSheets입니다.

Alerts

1. 화면 중앙에 나타납니다.

2. 일반적으로 두가지 대답을 요청합니다.

3. UI에 있어서 매우 파괴적인 특성을 지닙니다.(다른 동작을 멈추기 때문에)

4. 비동기적인 문제를 해결하기 위해 사용됩니다.

5. 짧은 대답을 얻을 수 있는 텍스트필드를 넣을 수 있습니다.

 

ActionSheets

1. 화면의 하단에서 나타납니다. iPad에서는 popover로 나타납니다.

2. View의 네모난 영역이나, bar button item에서 나타납니다.

3. 일반적으로 두가지 이상의 대답을 요청합니다.

 4. 사용자에게 Branching Decision을 제공합니다.

구현은 아래와 같습니다.

 

1. 초기화를 통해 UIAlertController 인스턴스를 만들어 줍니다.

var alert = UIAlertController( title: "Redeploy Cassini", message: "Issue commands to Cassin's Guidance system", preferredStyle: .actionSheet )

 

2. 사용자가 선택할 수 있는 action을 버튼형태로 제공합니다.

alert.addAction(UIAlertAction( title: String, style: UIAlertActionStyle, handler: { (action: UIAlertAction) in }))

 

3. 원하는 만큼의 Action을 넣고, 마지막으로 present 메소드를 통해 화면에 보이도록 합니다.

present(alert, animated: true, completion: nil)

Actionsheets와 Alerts는 유사한 API를 가지고 있습니다. 즉, 구현 방법이 유사합니다.

 

아이패드의 경우 액션 시트의 바깥쪽을 터치하면 자동으로 취소가 되기 때문에, style: .cancel으로 설정한 버튼은 자동적으로 무시가 됩니다.

또한 아이패드는 액션시트가 아닌 팝오버 스타일로 나오는데 설정을 하는 방법은

1. alert.modalPresentationStyle = .popover

2. let ppc = alert.popoverPresentationController

ppc?.barButtonItem = redeployBarButtonItem

을 통해 팝오버 형태로 표시할 수 있습니다.

 

 

Notification

MVC 패턴에서 모델은 UI에 관심을 가지지 않는다고 하였습니다.

하지만 Controller가 필요한 값이 바뀌었음을 알리는 방법이 필요할 듯보입니다.

이를 라디오 방송에 비유해서 설명드렸습니다.

디폴트로 notification Center를 NotificationCenter.default를 통해 얻을 수 있습니다.

여러분이 듣기 원하는 라디오 방송국이 있다면, 다음과 같은 메시지를 전달할 수 있습니다.

var observer: NSObjectProtocol?

observer = NotificationCenter.default.addObserver( forName: Notification.Name, object: Any? queue: OperationQueue? ) {(notification: Notification) -> Void in let info: Any? = notification.userInfo }

 

여기서 주의해야 하는 것이 라디오 방속국의 이름이 같더라도 object(방송하는 사람)가 다르면 다른 방송입니다.

Notification.Name은 여러분이 들을 수 있는 라디오 방송국입니다. 도큐먼트를 살펴보면 많은 이름들을 확인 할 수 있습니다.

Static var로 접근이 가능합니다.

물론 여러분만의 Notification.Name(String)을 통해 라디오 방송국을 만들 수 있습니다.

NotificationCenter.default.post( name: Notification.Name, object: Any?, userInfo: [AnyHashable: Any?] = nil )

위와 같이 특정 이름의 라디오 방송국에서 특정 정보를 전달 할 수도 있습니다.

 

KVO

프로퍼티의 값이 바뀌 었을 때, 동작하는 클로져를 등록할 수 있도록 합니다.

NSObject가 이와 같은 메커니즘을 가능하도록 합니다.

var observation = observed.observe(keyPath: KeyPath) { (observed, change) in }

상기의 Path에 있는 프로퍼티값이 바뀌면 코드가 실행됩니다.

 

Application Lifecycle

1. 여러분의 코드가 동작합니다. UI는 아닙니다.

2. 여러분의 코드가 동작합니다. UI event를 받고 처리합니다.

3. 제한적인 시간에 여러분의 코드를 실행합니다. UI는 아닙니다.

4. 여러분의 코드가 동작하지 않습니다. 또는 앱이 종료됩니다.

1. func application(UIApplication, will/didfinishLaunchingWithOptions:[UIApplicationLaunchOptionsKey:Any]? = nil)를 appDelegate가 받습니다.

2. func applicationWillresignActive(UIApplication)를 appDelegate가 받습니다.

3. func applicationDidBecomeActive(UIApplication)를 appDelegate가 받습니다.

4. func applicationDidEnterBackground(UIApplication)를 appDelegate가 받습니다.

5. func applicationWillEnterForeground(UIApplication)를 appDelegate가 받습니다.