[英]Problem avoiding first responder on a NSTextField
我需要在一個非常簡單的應用程序中更改輸入字段的行為:
每當我啟動應用程序時,第一個文本字段都會獲得焦點,但我不想要這種行為。
我嘗試在 IB 中檢查“拒絕第一響應者”。 它可以工作,但是選中此選項后,我無法按“選項卡”按鈕在輸入字段之間移動。
我該怎么做才能避免在啟動時集中注意力並保持使用標簽鍵盤按鈕移動的能力?
(以前)接受的答案不可靠並且效果不佳。 隱藏NSTextField
的另一個答案也不是很好,因為現在您的 Tab 順序中有一個新元素。
到目前為止,我發現效果最好的解決方案是:
在應用啟動時將NSTextField refusesFirstResponder
YES
。
然后,在前面的 controller、go 的viewDidAppear
中,將refusesFirstResponder
設置回NO
。
啟動后一切都表現得很完美,而且我沒有貪婪的NSTextField
在應用程序啟動時竊取第一響應者。
我找到了解決方案,你可以添加[window makeFirstResponder:nil];
例如在applicationDidfinishLaunching
中的 awakeFromNib 之后。
window?.makeFirstResponder(nil)
對我不起作用 - 當我檢查誰是第一響應者時,它是 window(而不是 NSTextField),但仍然選擇並激活了第一個 NSTextField。 我的解決方案(雖然我知道不是最干凈的)是創建一個隱藏的文本字段,並使其成為每次 window 加載時的第一響應者。
window?.makeFirstResponder(nil)
僅在我將所有 NSTextFields 設置為RefuseFirstResponder
,但隨后使用 Tab 在它們之間切換當然不起作用。
這對我有用,
override func viewDidAppear() {
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: false) { [weak self] (timer) in
NSApplication.shared.windows[0].makeFirstResponder(self?.textUsername)
let tRange = self?.textUsername.currentEditor()?.selectedRange
self?.textUsername.currentEditor()?.selectedRange = NSMakeRange((tRange?.length)!, 0)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.