배경 터치시 현재 뷰컨트롤러 내리기, 소유권 없애기
iOS에서 배경 화면을 터치했을때 이벤트를 캐치가 필요 할 때가 있습니다.
주로 현재 소유권을 가지고있는 컨트롤의 소유권을 없앨때 많이 사용합니다.
예를 들면 입력 완료한 텍스트필드의 키보드를 내린다거나 모달을 내리는 등의 액션이 있겠습니다.
해당 기능은 UIResponder에 있는 touchBegan:withEvent: 함수를 통해 가능합니다.
touchBegan:withEvent: 함수는 사용자가 뷰를 탭하는 이벤트가 발생하면 호출됩니다.
touchBegan:withEvent: 함수에는 이벤트가 발생한 오브젝트 정보들을 받아 볼 수 있는 UITouch객체들를 Set형태로 매개변수가 있습니다.
해당 변수로 어떤 뷰에서 이벤트가 발생했는지 알 수 있습니다.
아래 코드는 배경 화면을 탭했을때 현재 뷰 컨트롤러를 dismiss하여 사라지게 하는 코드입니다.
dismiss하는 부분에 원하는 기능을 구현하시면 되겠습니다.
Objective-C
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view == self.view) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
Swift
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
if let touch = touches.first , touch.view == self.view {
self.dismiss(animated: true, completion: nil)
}
}
'IT > iOs' 카테고리의 다른 글
Incompatible integer to pointer conversion assigning to 'int *' from 'int' 오류 (0) | 2020.02.21 |
---|---|
카탈리나 ios9, ios8 시물레이터 지원 중단 (0) | 2020.02.01 |
생체인증 구현하기 (0) | 2020.01.14 |
Xcode 11.1,11.2,11.3 Crash (0) | 2020.01.12 |
iOS 유니버셜 링크 적용 방법 (Universal Link) (0) | 2020.01.10 |