일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발
- 개발자
- SWIFT
- POP
- 의존성
- interface
- 부스트코스
- 인터페이스
- 클린코드
- 아이폰프로그래밍
- OOP
- 고차함수
- 함수형패러다임
- 협업
- IOS
- 디자인패턴
- fp
- iOS프로그래밍
- DesignPattern
- 네이밍
- Solid
- 문법
- CleanCode
- Swfit
- 객체지향프로그래밍
- 의도
- 이름
- 클린소프트웨어
- protocol
- 함수형프로그래밍
- Today
- Total
밤에 쓴 코드
iOS) IBOutlet / IBAction 본문
-
Outlet
- Outlet은 하나의 오브젝트에서 다른 오브젝트의 참조를 가지는 프로퍼티이다.
- reference는 인터페이스빌더를 통해 기록된다.
- Outlet들과 포함하는 오브젝트간의 연결은 nib 파일로 부터 unarchived(기록저장 용도로 쓰다가 실제로 앱에서 사용될 때 ) 될 때마다 재정립된다
- 포함하고 있는 오브젝트는 Outlet을
IBOutlet
이라는 타입한정자와 함께 약한참조의 형태(weak
)로 가지고 있다. - Outlet은 오브젝트의 캡슐화된 데이터의 일부기때문에 프로퍼티의 형태로 있어야한다.
- 오브젝트와 Outlet의 연결은
nib파일
에 기록된다. - nib파일이 로드될 때, unarchived 되고, 이 관계는 재정립된다.
@IBOutlet
이라는 태그가 정의부에 적용된다. 왜냐하면 인터페이스 빌더가 이 프로퍼티를 Outlet으로서 인식을 하기 위해서이다.- controller오브젝트와 인터페이스오브젝트간의 연결이 일반적이다. 하지만 인터페이스빌더의 인스턴스로서 보여질 수있는 오브젝트라면 연결이 어떤 오브젝트라도 가능하다.
- 오브젝트가 가지는 Outlet이 많으면 많을 수 록 메모리를 많이 필요로 한다. 인덱스로 참조하거나, 함수의 인자로 받는 형태로 대체 가능하다.
- Outlet 은 결국 오브젝트간의 하나의 합성의 형태이다. 하나의 객체에서 다른 객체에게 메시지를 보내기위해서 참조를 얻어오기 위해 요구되는 동적패턴이다.
-
Action
-
액션은 하나의 컨트롤이 타겟에게 보내는 메시지 이다.
-
시스템에게 의도를 전달하기 위해서
Control
을 사용한다. -
Control
을 통해서 하드웨어에서 발생한 이벤트 자체는 의도를 내포하기 어렵다, 그래서 이벤트와 명령간의 변환에는 일종의 메커니즘이 필요하다.target-action
이라고 불리는 -
Appkit 에서는 액션을 SEL타입의 인스턴스 변수로 저장한다.
-
action메소드는
sender(액션메시지를 보내는 컨트롤)
라는 Id타입의 단일 파라미터를 받으며, 반환은 따로 하지 않는다. -
UIkit에서의 이벤트는 사람의 손가락에서 시작되고, 이것은 멀티 터치또한 처리해야한다.
-
Target 과 action을 하나 이상의 제어 이벤트와 연결하여 대상 개체에 작업 메시지를 보내도록 컨트롤을 설정합니다
-
특정 지정된 방식으로 컨트롤을 터치하게되면, 컨트롤은 액션메시지
(sendAction:to:from:forEvent:)
를 UIApplication에게 보낸다. -
만약 액션메시지의 타겟이 nil이라면 액션메시지를 처리할 때 까지 체이닝을 통해 응답을 할 수 있는 객체를 찾는다.
-
UIKit에서의 메시지형태
-
• - (void)action • - (void)action:(id)sender • - (void)action:(id)sender forEvent:(UIEvent *)event
-
-
-
Target
-
타겟은 액션메시지의 리시버이다. Control은 액션메시지에 타겟을 Outlet의 형태로 가지고있다. 만약 action 의 타겟이 nil 이라도 아래의 절차에 따라 응답할 객체를 찾는다. 1. 메시지처리를 위한 검색은 keyWindow를 첫번째로 window의 contentView로 연쇄된다. 2. window와 window의 delegate를 시도한다. 3. mainWIndow와 keyWindow가 다르다면 mainWindow로 다시 검색을 시작합니다. 4. 오브젝트가 한번 시도를 하고 응답하지 못한다면, delegate에게 요청한다.
-
Control
-
Control 컨트롤은 사용자의 의도를 시스템에 반영한다. 컨트롤은 사용자의 명령을 수행할 오브젝트에게 전달한다 사용자가 컨트롤에서 어떤 작업을 했을 때, 하드웨어에는 이벤트를 발생시킨다. 이벤트는 타겟에게 액션메시지로 전달되고, 명령이 실행된다. UIKit에서의 컨트롤들은 UIControl(iOS의 target-action 메커니즘의 대부분이 정의된 )의 자식클래스이다.
- Step3 - 실행영상
하나의 버튼에는 여러개의 이벤트를 전달할 액션 메소드를 연결할 수 있고,
그 액션메소드는 여러개의 컨트롤(UIControl 을 구현한 인스턴스) 들이 이벤트를 전달할 수있다.
등록방법
하나의 버튼은 이벤트를 전달할 여러 개의 액션메소드를 지정할 수있다.
위의 스크린샷과 같이 하나의 버튼의 이벤트를 보낼 액션메소드를 이미 구현되어있는 액션메소드로 지정할 수있다.
UIControl.Event
Control Event | |
---|---|
Event | Description |
touchDown | 컨트롤을 누를 때 발생하는 이벤트 |
touchDownRepeat | 컨트롤을 연속해서 누를 때 발생하는 이벤트 |
touchDragInside | 컨트롤 내부에서 드래그가 이루어질 때 발생하는 이벤트 |
touchDragOutside | 컨트롤 외부에서 드래그가 이루어 질 때 발생하는 이벤트 |
touchDragEnter | 컨트롤이 외부에서 드래그를하며 내부로 드래그를 할 때 발생하는 이벤트 |
touchDragExit | 컨트롤의 외부로 드래그를 할 때 발생하는 이벤트 |
touchUpInside | 컨트롤 영역 안쪽에서 터치하고 손을 뗏을 때 발생하는 이벤트 |
touchUpOutside | 컨트롤 영역 안쪽에서 터치 후 컨트롤 외부에서 손을 뗏을 때 발생하는 이벤트 |
touchCancel | 컨트롤의 현재 터치를 취소햇을 때 발생하는 시스템이벤트 |
valueChanged | 컨트롤을 드래깅이나 다른 방법으로 조작해서 값이 변경됐을 때 발생하는 이벤트 |
primaryActionTriggered | 버튼이 눌릴때 |
editingDidBegin | UITextField에서 수정이 시작될 때 발생하는 이벤트 ( 텍스트 필드를 터치했을 때) |
editingChanged | UITextField에서 텍스트가 변경되었을 때 발생하는 이벤트 |
editingDidEnd | UITextField에서 수정이 끝났을 때 발생하는 이벤트 (텍스트 필드에서 포커싱이 사라질 때) |
editingDidEndOnExit | UITextField의 편집중에 키보드의 return을 눌렀을 때 발생하는 이벤트 |
allTouchEvents | 모든 터치 이벤트 |
allEditingEvents | UITextField에서 모든 편집 이벤트 |
applicationReserved | 앱의 사용에 따라 지정할 수 있는 컨트롤 이벤트 값의 범위 |
systemReserved | 내부 프레임워크 내에서 사용되는 예약된 컨트롤 이벤트 값의 범위 |
allEvents | 시스템 이벤트를 포함한 모든 이벤트 |
'iOS' 카테고리의 다른 글
URLSession Tutorial: Getting Started 번역본 (1) | 2019.10.20 |
---|---|
iOS) Segue (0) | 2019.07.23 |
iOS) ViewController의 특징과 생명주기 (0) | 2019.07.23 |
iOS) UITabBarController, UITabBar (0) | 2019.07.13 |