簡體   English   中英

在 NSTextField 上避免第一響應者的問題

[英]Problem avoiding first responder on a NSTextField

我需要在一個非常簡單的應用程序中更改輸入字段的行為:簡單的 OSX 應用程序

每當我啟動應用程序時,第一個文本字段都會獲得焦點,但我不想要這種行為。

我嘗試在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM