일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- NotificationService Extension
- native flutter view
- flutter rotate
- 푸시 데이터 저장
- 스위프트 테이블 뷰 셀
- 안드로이드 숏컷
- 스위프트 카메라
- 스위프트 웹뷰
- 안드로이드 앨범
- 스위프트
- silent push
- 스위프트 푸시
- Flutter NativeView
- 앱 백그라운드 푸시 데이터 저장
- 안드로이드 FCM
- swift autolayout
- 안드로이드 바로가기
- Swift flutterview
- Flutter UIKitView MethodChannel
- 플러터 뷰 컨트롤러
- swift 문자
- 노티피케이션 익스텐션
- FlutterView MethodChannel
- 스위프트 앨범
- flutter 회전
- Swift flutterviewcontroller
- 앱 꺼졌을 때 푸시 데이터 저장
- 안드로이드 에러
- 스위프트 UserDefaults
- swift sms
- Today
- Total
Things take time
[SWIFT] Embed ViewController(+ View) programmatically 본문
[Embed ViewController]
뷰 컨트롤러를 하위의 객체로포함시키는 것을 Embed!
흔히 이렇게 스토리보드에서 우측 드래그를 통해 Embed를 할경우 이런 표시로 나타난다.
그러나 만약, embed를 하는 경우가 2가지 이상이라면? 코드로 작성해야 할 것이다.
[코드]
import UIKit class EmbedController { public private(set) weak var rootViewController: UIViewController? public private(set) var controllers = [UIViewController]() init (rootViewController: UIViewController) { self.rootViewController = rootViewController } func append(viewController: UIViewController) { if let rootViewController = self.rootViewController { controllers.append(viewController) rootViewController.addChild(viewController) rootViewController.view.addSubview(viewController.view) } } deinit { if self.rootViewController != nil { for controller in controllers { controller.view.removeFromSuperview() controller.removeFromParent() } controllers.removeAll() self.rootViewController = nil } } }
이 소스코드를 이용하여 append해주면 끝
그런데 만약 UIView에 추가해야한다면 어떻게 될 까. 그 UIView에는 제약조건이 걸려있어서 특정 크기만큼에 넣어야하며, 그 들어간 뷰 컨트롤러의 뷰 크기 또한 UIView의 크기를 따라가야한다면(= 상대적인 UI가 나와야한다면)
1. 위의 소스를 가져다 쓰고, child에서 화면의 크기를 재 조정한다.
2. 지정한 View의 Constraint를 지정한 후에 아래의 코드를 사용한다.
addChild(tlkMsgLstMenuContController2) self.certainView.addSubview(childViewController.view) childViewController.view.frame = certainView.bounds childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] childViewController.didMove(toParent: self)
A.didMove(B)
A라는 ChildViewController에게 B라는 ParentViewController에 포함되었으니 Move하라는 의미
frame : 현재 슈퍼 뷰가 있을 경우, 상대적 위치
bounds : 슈퍼 뷰와 상관없이 자신의 위치가 절대적인 위치가 됨
[출처]
https://stackoverflow.com/questions/37370801/how-to-add-a-container-view-programmatically
https://stackoverflow.com/questions/43150320/embed-uiviewcontroller-inside-a-uiview
'iOS (기능)' 카테고리의 다른 글
[SWIFT] 특수문자, 한글, 숫자, 이모티콘 정규식! (4) | 2019.03.04 |
---|---|
[SWIFT] Command /usr/sbin/chown failed with exit code 1 (0) | 2019.01.22 |
[SWIFT] Substring is deprecated (0) | 2019.01.09 |
[SWIFT] 딜리게이트(Delegate) 패턴 사용하기 (1) | 2019.01.02 |
[SWIFT] UIPageViewController 사용하기 (하나의 뷰 컨트롤러) (0) | 2018.12.31 |