본문 바로가기
프로그래밍/iOS

수동으로 UI 컨트롤에 이벤트 전달

by 백룡화검 2012. 2. 7.
UI 컨트롤에 등록된 이벤트 핸들러가 정상적으로 호출되는지 테스트를 하거나, 

그와 동일한 효과를 로직에서 처리해야할 경우 수동으로 컨트롤에 이벤트를 발생시킬 수 있다.

sendActionsForControlEvents: 메시지를 사용하여, 대상이 되는 컨트롤의 인스턴스에 이벤트 종류를 지정하여 전달한다 .
 
 UIButton *btn = (UIButton*)[self.view viewWithTag:1001];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside]; 
 
  

Control 에 전달할 수 있는 이벤트 종류는 다음과 같다.
enum { 
     UIControlEventTouchDown = 1 << 0,      
     UIControlEventTouchDownRepeat = 1 << 1, 
     UIControlEventTouchDragInside = 1 << 2, 
     UIControlEventTouchDragOutside = 1 << 3, 
     UIControlEventTouchDragEnter = 1 << 4, 
     UIControlEventTouchDragExit = 1 << 5, 
     UIControlEventTouchUpInside = 1 << 6, 
     UIControlEventTouchUpOutside = 1 << 7, 
     UIControlEventTouchCancel = 1 << 8, 
     UIControlEventValueChanged = 1 << 12,
     UIControlEventEditingDidBegin = 1 << 16, 
     UIControlEventEditingChanged = 1 << 17, 
     UIControlEventEditingDidEnd = 1 << 18, 
     UIControlEventEditingDidEndOnExit = 1 << 19, 
     UIControlEventAllTouchEvents = 0x00000FFF, 
     UIControlEventAllEditingEvents = 0x000F0000, 
     UIControlEventApplicationReserved = 0x0F000000, 
     UIControlEventSystemReserved = 0xF0000000, 
     UIControlEventAllEvents = 0xFFFFFFFF 
}
 
위 메시지를 잘 사용하면,  UI  테스팅을 자동화하는 프레임워크를 만들 수 있지 않을까?