我正在慢慢學習Objective-C和Cocoa,並且我迄今爲止在文本視圖中捕獲關鍵事件的唯一方式是使用委派,但我無法找到有用的文檔和有關如何實現此類示例的示例解。任何人都可以指引我正確的方向或提供一些第一手的幫助?在NSTextView中捕獲關鍵事件的最佳方式?
回答
一般來說,你實現它的方法是簡單地添加所需的功能,以您的視圖的控制器,並設置其委託。例如,如果您希望代碼在視圖加載時運行,那麼您只需將視圖委託給控制器,然後實現awakeFromNib函數。
因此,檢測按鍵的文本視圖,請確保您的控制器是文本視圖的委託,然後實現這一點:
- (void)keyUp:(NSEvent *)theEvent
注意,這是一種遺傳NSResponder類的方法,而不是一個NSTextView方法。你想捕捉的NSTextView關鍵事件將解決更高層次的目標 -
它告訴我們什麼你真正想要實現是非常重要的。
例如,當有人問我如何捕獲NSText 字段中的關鍵事件時,他們真正想知道的是如何驗證字段中的輸入。這是通過將字段的格式化程序設置爲NSFormatter的實例(無論是Cocoa中包含的格式化程序還是自定義格式化程序之一)而完成的,而不是通過直接處理鍵擊。
那麼給出這個例子,你真正想要完成什麼?
我已經做了一些艱苦的挖掘工作,我確實找到了自己的問題的答案。我會在下面看到它,但要感謝兩位回答問題的傢伙。我認爲Stack Overflow已經是一個很棒的網站了 - 我希望更多的Mac開發人員在測試結束後能夠找到自己的方式 - 這對於其他開發人員來說是一個很好的資源,可以幫助他們轉向平臺。
所以,我所做的,由丹尼的建議,找到我的代表團的答案。我從Danny的文章中不能理解的是,委託對象中有一組啓用委託的方法,並且委託必須實現所述事件。所以對於一個TextView,我能夠找到方法textDidChange,它完成了我想要的方式,而不僅僅是捕獲按鍵所能做到的。所以,如果我在我的控制器中執行此操作:
- (void)textDidChange:(NSNotification *)aNotification;
我可以對正在編輯的文本做出響應。當然,還有其他方法可用,我很高興與他們一起玩,因爲我知道我會像我一樣學習很多東西。再次感謝,夥計們。
只是爲了語法高亮小費:
不要突出整個文本視圖一次 - 這是非常慢。另外,不要使用-editedRange高亮顯示最近編輯的文本 - 如果用戶將大量文本粘貼到文本視圖中,速度也會非常慢。
相反,你需要突出其這樣做的可見文本:您高亮代碼
NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];
然後你喂visibleRange。
- 1. 捕獲Web應用程序的所有關鍵事件的最佳方法?
- 2. 在Silverlight中捕獲關鍵事件
- 3. Griffon捕獲關鍵事件
- 4. 在Javascript中處理多個關鍵事件的最佳方式是什麼?
- 5. 在C++中關聯3件事的最佳方式
- 6. 在動態加載的圖像上捕獲點擊事件的最佳方式
- 7. 如何捕獲關鍵事件
- 8. 什麼是在Magento中捕獲404s的最佳方式
- 9. 在Google Script中嘗試/捕獲HTTP響應的最佳方式
- 10. 在Codeigniter中捕獲Doctrine異常的最佳方式
- 11. 在任務中捕獲異常的最佳方式是什麼?
- 12. 在Mysql中實現關鍵字或標籤的最佳方式
- 13. 安排事件的最佳方式
- 14. 在WPF中的應用程序級別捕獲關鍵事件
- 15. 失去焦點時處理鍵盤事件的最佳方式
- 16. 在VB.NET中捕獲按鍵事件
- 17. 實現窗口關閉事件的最佳方式
- 18. 捕獲Android軟鍵事件
- 19. 在mx中捕獲關鍵事件:圖片
- 20. 從C#中的Windows服務中捕獲關鍵事件#
- 21. 在Python中捕獲關機事件
- 22. wxpython捕獲wx.Frame中的鍵盤事件
- 23. Ruby - 提取正則表達式捕獲組的最佳方式?
- 24. iframe中的元素如何捕獲關鍵事件?
- 25. 如何捕獲服務中的關鍵事件?
- 26. 在ActionScript/Flex 3中將事件與類關聯的最佳方式是什麼?
- 27. 捕獲tabpage關閉事件
- 28. 在C#中使事件異步的最佳方式#
- 29. 在JavaScript中添加事件的最佳方式是什麼?
- 30. 在TestCafe中等待'WebComponentsReady'事件的最佳方式是什麼?
如果將其放入委託中,則不會調用keyUp。你必須繼承NSTextView並把它放在那裏。 – 2014-03-20 23:15:18