2014-03-01 2 views
0

WebView에서 실시간 미리보기 (objective-C, Mac OS X)로 HTML 편집기를 구축하고 있습니다. 지금까지 그렇게 좋았고 필요한 거의 모든 기능이 있습니다. 두보기 (NSTextView 및 WebView)가 동기화되어 스크롤되고 미리보기가 완벽하게 렌더링됩니다. 내 문제는 WebView의 스페이스 바 키에 대한 기본 반응입니다. 아래로 스크롤하십시오. WebKit 소스에서 많은 시간을 들여 성공하지 못하게하려고 노력했습니다. 나는 WebView를 서브 클래스 화하고 keyDown을 캐치하려고 시도하고 있었고, WebFrameView를위한 keyDown을 swizzle하고, firstRsponder 상태를 거절했습니다. 많은 행운이 없었습니다. 여기서 내가 무엇을 놓치고 있니? 이 동작을 제거하는 방법에 대한 아이디어는 인정 될 것입니다.스페이스 바를 누르면 WebFrameView pageDown 스크롤을 비활성화하는 방법은 무엇입니까?

+0

NSScrollView를 서브 클래 싱하고 거기에 공간을 캡처 해 보셨습니까? – Volker

+0

WebView에 포커스가있을 때 스페이스 키를 잡는 데 아무런 문제가 없습니다. 그러나 포커스가 NSTextView에 있고 WebView가 이벤트를 가져 오는 중 ... ...? 서브 클래 싱 NSScrollView 도움이 될 수 없습니다. NSTextView가 키 이벤트를 리스폰 더 체인에 전달하는 것을 멈추는 방법 (그러나 여전히 스페이스 키가 작동하고 있습니까?) –

답변

2

여기에 동일합니다. 실험을 위해 NSEvent.addLocalMonitorForEventsMatchingMask을 사용하여 모든 주요 이벤트를 가로 챈 다음 모든 공백을 밑줄로 매핑했습니다. NSTextView에서 공백 대신 밑줄이 표시되었지만 WebView는 아래로 계속 스크롤했습니다. 나는 WebView가 다른 레벨에서 키보드 이벤트를 가로 채고 있다고 생각합니다.

그러나 스크롤 다운 문제는 응용 프로그램이 WebView 콘텐츠를 처리하는 동안 (더 많거나 적은 시간에 사용자 입력)에만 발생하는 것으로 나타났습니다.

는 그러므로 나는 지연을 삽입 -

private var _refreshAskCount = 0 
func refreshWebViewIfIdontAskYouAgainInTheNext(#seconds: Double) { 
    let count = ++self._refreshAskCount 
    let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))) 
    dispatch_after(delay, dispatch_get_main_queue()) { 
     if count == self._refreshAskCount { 
      self.renderWebView() 
     } 
    } 
} 

이 문제를 해결하는 것, 또는 적어도 크게 그것을 줄이기 위해 : 예 : - 만 사용자 비 활동의 일정 간격 후 웹보기의 콘텐츠를 업데이트.

관련 문제