본문 바로가기

IT/iOs

배경 터치시 현재 뷰컨트롤러 내리기

 

배경 터치시 현재 뷰컨트롤러 내리기, 소유권 없애기

 

 

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)
	}
}