4월, 2018의 게시물 표시

Delegate란?

이미지
사용빈도가 높지만 완벽하게 이해하기가 어려웠던 delegate에 대해 고민해 봤다. 네이버 사전에는 이렇게 나온다. 이 의미로 playground로 간단하게 코드를 만들어 보았다. 실행하면 아래와 같다. 보스가 해야 할 일을 각 부하에게 일을 시킨다는 의미로 code를 짜 보았다. 이렇게 한 class에서 data를 넘기고 그 data를 다른 class에서 처리하는 과정이 delegate 패턴인것으로 보인다.  차후 protocol과 연계해서 다시 한번 정리하도록 하겠다.

알림창 커스터마이징 (Customizing AlertController) - II

이미지
이번에는 조금 더 깊게 알림창을 다루어 보자. 우선 아래 동영상과 같이 mainView에 알림창에 tableView를 띄우고 tableView에서 이름을 추가하고 임의의 이름이 있는 cell을 선택 후 ok를 클릭하면 mainView에 선택된 이름이 나타나게 하자. 이전 알림창 커스터마이징에서 storyboard를 이용해서 진행하도록 하겠다. - 순서 - 1. ViewController 생성 (Button / outlet) 2. UIAlertController 구현 및 UIViewController 추가 3. AlertView에 tableView 등록하기 (storyboard 이용함) 4. TableView에 이름을 추가하는 alertView를 생성하자. 5. TableAlertViewController와 ViewController와의 data 연결 ------- 1. ViewController 생성 (Button / outlet) nameLabel과 이름선택 button을 생성하고 viewController에 연결해 준다. 2. UIAlertController 구현 및 UIViewController 추가 buttonClicked(_sender:)에 다음과 같이 code를 작성한다. 알림창 커스터마이징(Custom AlertController) - I 에서 진행한 내용과 동일하다. 알림창 생성 및 contentView를 setValue(_:forKey:) methode로 알림창에 등록 하였다. contentView는 전체 높이의 2/3이 되게 설정하였다. <실행 화면> 3. AlertView에 tableView 등록하기 (storyboard 이용함) 먼저 storyboard에 View Controller를 추가하고 Table View와 Navigation Bar 및 Navigation Item("+" icon)을 아래 그림과 같이 추가한다. tableViewCell의 ident

알림창 커스터마이징 (Customizing AlertController) - I

이미지
알림창을 좀더 사용자화 하여 내가 원하는 알림창을 만들어 보자. 아래와 같은 모습을 나타내도록 하겠다. <완성 화면> -- 순서 --  1. UIAlertController 구현  2. AlertView에 UIViewController 추가  3. UIViewController에 mapView 생성  4. mapView에 annotation 추가 ---------- 1. UIAlertController 구현  #apple에서 ios8.0 부터 UIAlertView/UIActionSheet가 아닌 UIAlertController를 사용하게 하였다. 하여 UIAlertController 설정에 preferredStyle 매개변수의 인자값으로 alertView와 actionSheet를 선책할 수 있게 되었다. 좀더 간편해진 느낌이 들긴 한다. UIAlertController 생성하고 addAction으로 ok / No 로 선택할 Action을 추가하였다. addAction에서 handler에는 아무런 action이 없도록 nil 처리 하였다. <실행 화면> 2. AlertView에 UIViewController 추가 UIViewController로 contentView 하나 생성하고 알아볼 수 있게 바탕화면을 붉은색으로 설정하였다. 그리고 alertView에 contentView를 등록하였다. 등록을 하기 위해 setValue(_:forKey:) methode를 이용하였고 이때 forKey: 부분에 속성으로 반드시 "contentViewController"로 명기하여야 한다. 왜 apple에서 그랬는지는 모르겠지만 alertView에 커스터마이징 할 수 있는 public API를 제공하지 않는 듯 하다. 하여 이렇게 private API를 사용하여 커스터마이징 할 수 밖에 없는 듯 보인다. <실행 화면> 3. UIViewController