有沒有什麼辦法可以防止NSTokenField在按下ENTER鍵時或在向第一個響應者發出使用TAB鍵時選擇所有內容?防止在NSTokenField中選擇所有令牌
3
A
回答
6
NSTokenField是NSTextField的子類。沒有簡單直接的方法來直接操作這些類的選擇(除了選擇全部的選擇)。
要做到這一點,當它成爲第一個響應者,你需要繼承NSTokenField(記得要設置類的字段在你的XIB到您的自定義子類),並覆蓋-becomeFirstResponder像這樣:
- (BOOL)becomeFirstResponder
{
if ([super becomeFirstResponder])
{
// If super became first responder, we can get the
// field editor and manipulate its selection directly
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
return YES;
}
return NO;
}
該代碼首先查看super是否回答「yes」(併成爲第一響應者)。如果是這樣,我們知道它會有一個字段編輯器(一個NSText實例),它的選擇我們可以直接操作。所以我們得到它的字段編輯器並設置它的選定範圍(我把插入點放在{lastchar,nolength}範圍的末尾)。
爲此當該字段被完成編輯(返程,跳格出等),覆蓋-textDidEndEditing:這樣的:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
[super textDidEndEditing:aNotification];
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
}
在這種情況下,當用戶結束編輯,該方法允許超級做它的事情,然後它看起來是否仍然是第一響應者。如果是這樣,它和上面一樣:將插入克拉放在場地的盡頭。
請注意,此行爲不是標準的,並且是意外的。謹慎使用。
相關問題
- 1. NSTokenField令牌消失非選擇NSTokenField
- 2. NSTokenField選擇的令牌
- 3. 從NSTokenField獲取令牌
- 4. NSTokenField和刪除令牌
- 5. NSTokenField選擇
- 6. 防止在jQuery ASM中選擇所有可用選項select
- 7. 防止在HTML中選擇
- 8. 減少NSTokenField令牌的內邊距
- 9. NSTokenField設置令牌的最大數量
- 10. NSTokenField不檢查模糊令牌
- 11. AngularJS防止默認選擇指令
- 12. 防止QTable選擇編輯中的所有文本
- 13. 防止Chrome在畫布外繪製時選擇所有內容?
- 14. 如何防止在選擇
- 15. 帶有使用Swift的建議令牌的NSTokenField
- 16. 處理NSTokenField中的重複選擇
- 17. ODBC選擇所有命令
- 18. 防止NVelocity從顯示令牌
- 19. 防止加入令牌jQuery的TokenInput
- 20. 防止雙重DATAS在選擇框中
- 21. 防止在DataGridView中選擇單元格
- 22. 防止在Silverlight中選擇TabControl
- 23. 在Silverlight中防止Treeview選擇
- 24. 如何防止在列表中選擇
- 25. jQuery - 防止在選擇多個選項中取消選擇
- 26. 防止UITextView中的「選擇」和「全選」?
- 27. jQuery的防止多選擇在多選
- 28. Android - 防止edittext複製/粘貼和雙擊選擇所有
- 29. 防止當有一個選擇
- 30. 選擇元素 - 防止選擇更改
謝謝約書亞,那有效!但是按ENTER鍵時的行爲呢。試圖重寫'keyDown:'不起作用。任何想法來禁用這種行爲? – Robert 2010-06-10 12:01:58
我用-textDidEndEditing:case更新了答案。由於這兩種方法最終都會調用相同的東西,它開始看起來像重構的工作。我會將字段編輯器代碼放入其自己的方法(如-adjustSelection)中,並調用該代碼以使代碼更具可讀性並減少重複性。 – 2010-06-10 14:08:19
textDidEndEditing:案件對我來說工作不正常。讓我們說在最後一個標記之後設置文本光標,並且不要開始輸入任何字符,而只需單擊RETURN。這種情況下,即使我添加了textDidEndEditing:提案,所有標籤都被選中。任何想法爲什麼? – Robert 2010-06-11 19:57:33