Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DesignPattern
- 의도
- protocol
- 함수형패러다임
- 의존성
- POP
- interface
- 아이폰프로그래밍
- 개발
- 협업
- 디자인패턴
- Solid
- 개발자
- iOS프로그래밍
- 클린소프트웨어
- fp
- OOP
- 네이밍
- 이름
- 문법
- 인터페이스
- CleanCode
- 객체지향프로그래밍
- 부스트코스
- SWIFT
- IOS
- Swfit
- 고차함수
- 함수형프로그래밍
- 클린코드
Archives
- Today
- Total
밤에 쓴 코드
iOS) Segue 본문
Segue
하나의 Scene 으로부터 다른 Scene으로의 전환을 보여주는 연결입니다.
- Segue Type
Symbol | Type | Description |
Show (Push) |
이 segue는 target view controller의 showViewController:sender: 가 실행된다.일반적으로는 source View Controller위에 새로운 컨텐트가 모달로 보여진다. 몇몇 뷰컨트롤러들은 해당 메소드가 재정의 되어있어서 다른동작을 한다. UIKit은 targetViewControllerForAction:sender: 메소드로 source View Controller 를 찾는다. 예) NavigationViewController 는 새로운 뷰컨트롤러를 네비게이션 스택에 push 한다. |
|
Show Detail (Replace) |
이 segue는 target view controller 의 showDetailViewController:sender: 메소드가 실행된다.이 segue는 UISplitViewController 객체 내에 내장된 view controller에 대해서만 관련된 segue이다. split view controller는 자식 뷰컨트롤러를 새로운 컨텐츠로 replace합니다. 나머지 대부분의 view controller에서는 모달로 보여줍니다. |
|
Present Modally | 이 segue는 view controller를 모달로 보여준다. | |
Present as Popover | 기존 view 에 앵커를 둔 컨텐츠를 보여줍니다. | |
Custom | 개발자가 지정한 행동을 하는 segue입니다. |
-
UIModalTransitionStyle(animation - 전환 효과 )
-
enum UIModalTransitionStyle: Int { case coverVertical // viewcontroller가 전환될 때 view가 미끄러지듯이 올라오고, dissmiss시 내려가는 기본 transtion스타일 case flipHorizontal // 오른쪽에서 왼쪽으로 수평회전을 한다. 🔄 새로 떠오르는 뷰가 이전 뷰의 뒷면에 있던 것처럼 보인다. 뒤집히는 모양의 transition case crossDissolve // 이전 뷰가 흐릿해지고 전환될 뷰가 뚜렷해지는 효과가 동시에 일어난다. case partialCurl // 한 쪽 코너에서 전환될 뷰가 말아 올라오는 형태로 드러난다. UIModalPresentationStyle.fullScreen 에서만 지원되고 , 다른 형태에서 사용시 exception이 발생한다 }
-
UIModalPresentStyle
-
enum UIModalPresentStyle: Int { case automatic // 시스템이 보여주는 방식을 정한다. case fullScreen // 스크린을 덮는 보여주는 방식 case pageSheet // 기본 뷰를 일부분을 덮는 보여주는 방식 case formSheet // 스크린의 중앙에 컨텐츠를 보여주는 방식 case currentContext // 다른 뷰컨트롤러를 통해 내용을 보여주는 방식 case custom // 사용자 정의 animator 객체로 부터 관리되는 보여주는 방식 case overFullScreen // 스크린을 덮는 뷰를 보여주는 방식 case overCurrentContext // 다른 뷰 컨트롤러의 컨텐츠를 통해 보여주는 방식 case blurOverFullScreen // 새로 표현하는 뷰를 보여주기 전에 기존의 뷰를 흐릿하게 하며 보여주는 방식 case popover // popover뷰로 보여주는 방식 case none }
-
Show (Push)
-
UINavigationViewController의 경우 Navigation Stack에 viewcontroller가 push된다.
-
위의 NavigationBar의 Item을 보면
< Back
을 누르면 현재 viewcontroller가 pop된다.
-
-
Present Modally
- viewcontroller를 modal로 보여주는 방식이다,
- 이전 view를 가리는 새로운 view가 보여지는 방식이다.
-
CustomSegue
- 사용자 정의 segue 이다.
- 개발자가 정의한 대로 동작하고
UIStoryboardSegue
를 상속하며 ,perform()
을 재정의하여 동작하게 할 수 있다.
-
Prepare
- Segue 가 발생하여 다른 viewcontroller로 전환되기 직전에 발생하는
prepare()
가 호출된다. - source viewcontroller에서 destination viewcontroller 로 _data_를 넘기기위해 사용할 수 있다.
- Segue 가 발생하여 다른 viewcontroller로 전환되기 직전에 발생하는
-
Unwind
-
액션메소드 정의하기
// destination 이 될 viewcontroller 파일 내에 선언
@IBAction func myUnwind(_ segue: UIStoryBoardSegue) {
}
unwind()의destination이 될 viewcontroller를 정한다.
-
- 그 곳에unwindSegue를 받을 수 있는@IBAction메소드를 정의해둔다.
-
Exit 연결하기
-
segue의 트리거를 드래그해서exit에 놓는다.
-
IBAction으로 정의된 메소드 목록이 노출되고 거기에 연결된다.
-
스토리 보드의 흐름도
-
shouldPerformSegue()
: 세그웨이 진행여부 판단 -
optional func shouldPerformSegue(withIdentifier identifier: NSStoryboardSegue.Identifier, sender: Any?) -> Bool
- 세그웨이의 진행여부를 결정한다.
- 내부에서 특정상태 일 때 세그웨이를 진행하지 않는 다면 이 부분에서 상태에 따른 반환을 하면된다.
-
prepareForSegue()
: 세그웨이 직전 제어 -
// swift에서의 prepareForSegue func prepare(for segue: UIStoryboardSegue, sender: Any?)
- 세그웨이가 발생하기 직전에 수행된다.
sender
는 Segue를 발생시킨 trigger오브젝트이다.- 한 뷰 컨트롤러에서 다른 뷰컨트롤러의 세그웨이는 여러 개가 존재 할 수 있다
- 그에 해당하는 trigger 에 따른 분기가 가능하다.
- 이 메소드내에서 새로 보여질 뷰컨트롤러의 데이터를 제어할 수있다.
segue.identifier
프로퍼티를 이용해서segue
종류에 따른 분기가 가능하다.- 한 뷰 컨트롤러가 전환 될 뷰 컨트롤러가 다양하여 Segue가 여러개 존재 할 수 있다.
segue.destination / segue.source
프로퍼티를 이용해서destination
에 해당하는 뷰 컨트롤러에 데이터를 전달할 수 있다.
'iOS' 카테고리의 다른 글
URLSession Tutorial: Getting Started 번역본 (1) | 2019.10.20 |
---|---|
iOS) IBOutlet / IBAction (0) | 2019.07.23 |
iOS) ViewController의 특징과 생명주기 (0) | 2019.07.23 |
iOS) UITabBarController, UITabBar (0) | 2019.07.13 |
Comments