키보드의 터치 이벤트를 감지 할 수 있어야합니다. 일정 기간 동안 사용하지 않은 화면 (예 : 터치 이벤트 없음)을 표시하는 앱이 있습니다.이 문제를 해결하기 위해 UIWindow를 서브 클래 싱하고 sendEvent 함수를 구현하여 전체 애플리케이션에서 터치 이벤트를받을 수있었습니다. 이 방법을 한 곳에서 구현합니다. 이것은 키보드가 나타나고 사용자가 키보드로 타이핑 할 때 옆에서 작동합니다. 내가 알아야 할 것은 키보드에서 touch 이벤트를 감지하는 방법이 있다는 것입니다. 이는 sendEvent가 uiWindow에서하는 것과 같습니다. 미리 감사드립니다.iphone 키보드 터치 이벤트
2
A
답변
4
이 문제의 해결책을 찾았습니다. 다음 알림을 볼 경우 키를 누를 때 이벤트를받을 수 있습니다. 이러한 사용자 정의 uiwindow 클래스에 이러한 알림을 추가 했으므로 응용 프로그램 전체에서 이러한 터치 이벤트를받을 수 있습니다.
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextViewTextDidChangeNotification object: nil];
- (void)keyPressed:(NSNotification*)notification
{ [self resetIdleTimer]; }
어쨌든 다른 사람에게 도움이되기를 바랍니다.
0
iPhoneDev : 여기 내가하고있는 일이 여기있다.
사용자 지정 UIWindow 개체가 있습니다. 이 객체에는 터치가있을 때마다 재설정되는 NSTimer가 있습니다. 이 터치를 얻으려면 UIWindow의 sendEvent 메서드를 재정의해야합니다. 이 후
- (void)resetIdleTimer
{
if (self.idleTimer)
{
[self.idleTimer invalidate];
}
self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:PASSWORD_TIMEOUT_INTERVAL target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];
}
의 idleTimerExceeded에, 나는에 메시지를 보내
여기- (void)sendEvent:(UIEvent *)event
{
if([super respondsToSelector: @selector(sendEvent:)])
{
[super sendEvent:event];
}
else
{
NSLog(@"%@", @"CUSTOM_Window super does NOT respond to selector sendEvent:!");
ASSERT(false);
}
// Only want to reset the timer on a Began touch or an Ended touch, to reduce the number of timer resets.
NSSet *allTouches = [event allTouches];
if ([allTouches count] > 0)
{
// anyObject works here.
UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
if (phase == UITouchPhaseBegan || phase == UITouchPhaseEnded)
{
[self resetIdleTimer];
}
}
}
가 resetIdleTimer입니다 :
이
은 sendEvent 방법은 내 사용자 지정 창 클래스의 모습입니다 창 위임 (이 경우 appDelegate).- (void)idleTimerExceeded
{
[MY_CUSTOM_WINDOW_Delegate idleTimeLimitExceeded];
}
appDelegate에서이 사용자 정의 윈도우 객체를 만들 때 appDelegate를이 윈도우의 위임자로 설정합니다. 그리고 idleTimeLimitExceeded의 appDelegate 정의에서 타이머가 만료 될 때해야 할 일을합니다. 핵심은 사용자 정의 윈도우를 만들고 sendEvent 함수를 재정의하는 것입니다. 이것을 위의 두 키보드 알림과 결합하여 사용자 정의 윈도우 클래스의 init 메소드에 추가 했으므로 응용 프로그램의 어느 위치에서나 모든 터치 이벤트의 99 %를 화면에서 가져올 수 있어야합니다.
관련 문제
- 1. iPhone 멀티 터치 키보드 검색 버튼 사용
- 2. 맞춤 키보드의 터치 이벤트
- 3. 코코아 터치 - 키보드 캡처
- 4. png 투명도 등록 터치 이벤트 iphone?
- 5. iPhone 웹 앱 - 터치 및 제스처 이벤트
- 6. iOS 터치 이벤트
- 7. 키보드 이벤트
- 8. 키보드 이벤트
- 9. iPhone 키보드 동작/터치 듣기 방법 (예 : 'GO', '검색'등)
- 10. 코코아 터치 - UISearchBar 키보드 - 검색 버튼 숨기기
- 11. 터치 이벤트 문제
- 12. 아이폰 터치 스크린 이벤트
- 13. 아날로그 시계의 터치 이벤트
- 14. UIwebview 터치 이벤트
- 15. UIScrollview + UItextview 터치 이벤트
- 16. 내가 터치 스크린 이벤트
- 17. 모든 터치 이벤트 차단하기
- 18. 자바 스크립트 터치 이벤트
- 19. 다중보기 온 터치 이벤트
- 20. Android에서 터치 이벤트
- 21. 터치 이벤트 문제 이미지보기
- 22. uiscrollview에서 터치 이벤트 처리
- 23. 터치 이벤트 전달
- 24. Android TextView 터치 이벤트
- 25. UISegmentedControl 대리자/터치 이벤트
- 26. UIImageView의 터치 이벤트
- 27. 화면 터치 이벤트 수신
- 28. 터치 이동 중 터치 이벤트 중지
- 29. 키보드 이벤트 문제
- 30. C에서 키보드 이벤트 감지
화면이 비활성 상태인지 확인하는 코드를 게시 할 수 있습니까? 나는 똑같이하고있다. 그냥 사용자가 활성화되어 있는지 확인 appdelegate에 타이머를 사용하여 r을 알고 싶었 ... – iPhoneDev
내 대답을 참조하십시오. – Bittu