반응형
@IBAction 타입 지정할 때 기준
개별 타입을 선택해야 할 때
- 액션 메소드를 호출한 컨트롤의 속성값이 필요하거나, 이를 제어해야 할 때
Any 타입을 선택해야 할 때
- 서로 다른 타입의 컨트롤이 동일한 액션 메소드를 호출하게끔 처리하고 싶을 때
- 액션 메소드를 호출한 컨트롤의 정보가 필요 없을 때
- 개별 타입을 반드시 사용해야 하는 경우를 제외한 나머지 모든 경우
뷰 사이에서 값 전달할 때 프로퍼티로 받는 이유
- A뷰에서 B뷰로 값을 넘길 때 아울렛 변수에 바로 받지 않고 프로퍼티에 받는 이유는 아울렛 변수는 외부에서 값을 직접 대입할 수 없는 변수이기 때문입니다.
- 또한, 아울렛 변수는 외부 객체에서 직접 참조할 수 없도록 제한되어 있습니다.
- 즉
private
변수로 생성되어 있다고 생각하면 될 것 같습니다. - 그래서 프로퍼티를 생성하여 값을 받고 넘겨줍니다.
델리게이트
- 델리게이트 패턴이 사용되는 가장 대표적인 예는 이벤트 리스너(Event Listener)
- 델리게이트 프로토콜의 이름은 항상 해당 객체의 클래스명 + Delegate
- ex : UITextField -> UITextFieldDelegate
최초 응답자 (First Responder)
-
UIWindow 객체는 사용자 인터페이스 구조에서 가장 가까이 위치한 객체로 , 사용자로부터 발생하는 터치 관련 이벤트를 내부 객체로 전달하는 역할을 합니다.
-
이를 위해 UIWindow는 이벤트가 발생했을 때 우선적으로 응답할 객체를 가리키는 최초 응답자라는 포인터를 가지고 있습니다.
-
예를 들어 화면에 진입하자마자 포커스를 주고 싶은 텍스트필드에 최초 응답자를 지정(?)합니다.
-
주의사항
- 뷰를 상속받은 하나의 객체인 UISlider 객체는 터치 이벤트를 입력받아 처리하지만, 최초 응답자 상태를 허용하지 않습니다.
- 화면에 키보드가 표시된 상태에서 다른 요소를 건드려도 키보드가 사라지지 않는 것은 이 때문입니다.
- 다른 요소를 터치하더라도 그 객체가 UIResponder를 상속 받지 않았다면 터치 이벤트만 발생할 뿐, 최초 응답자 포인터는 텍스트 필드를 그대로 가르키기 때문
- 따라서, 최초 응답자 객체를 해제하기 위해서는 해제하는 메소드를 사용해 없애줘야 키보드를 없앨 수 있습니다.
-
사용방법
let textField = UITextField() textField.becomeFirstResponder() // 최초 응답자 지정 (키보드가 나타나고 입력상태가 된다.)
// 기타 작업 코드 작성
textField.resignFirstResponder() // 입력이 완료되면 최초 응답자 객체를 해제 (키보드가 사라진다.)
참고
에러메세지 처리
Expression type '()' is ambiguous without more context
→ 에러메세지는 Equatable 추가해야될 경우가 종종 있음
반응형
'Swift' 카테고리의 다른 글
이미지 사용 용도에 따른 UIImage 생성자 선택 (0) | 2018.11.04 |
---|---|
Status Bar 색상 지정 (0) | 2018.11.04 |
*.pbxproj 삭제 했을 때 대처하는 방법 (0) | 2018.11.03 |
Switch 사용하면서 값이 배열 안에 있는지 확인하는 방법 (0) | 2018.11.03 |
여러 타입을 저장하기 위한 enum 만들기 (0) | 2018.11.02 |