2014-03-01 83 views
0

我正在WebView中構建一個帶有實時預覽(objective-C,Mac OS X)的HTML編輯器。到目前爲止這麼好,幾乎獲得了我需要的所有功能:兩個視圖(NSTextView和WebView)同步滾動,預覽呈現完美。我的一個問題是WebView對空格鍵的默認反應:向下滾動。我花了很多時間在WebKit資源中挖掘,試圖在沒有成功的情況下禁用它。我試圖對WebView進行子類化,並在那裏捕獲keyDown,爲WebFrameView調用keyDown,拒絕firstRsponder狀態......沒有太多運氣。我在這裏錯過了什麼?任何想法如何擺脫這種行爲,將不勝感激。如何禁用WebFrameView頁面當空格鍵被按下時,滾動頁面?

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

這似乎解決這個問題,或者至少大大地減少它。

相關問題