【问题标题】:Select next NSTextField with Tab key in Swift在 Swift 中使用 Tab 键选择下一个 NSTextField
【发布时间】:2016-03-15 00:56:35
【问题描述】:

在 Swift 中,有没有办法通过按键盘上的 tab 来更改响应者或选择另一个文本视图?

注意事项: 它用于填写空白类型的应用程序。

我的 VC 创建一个单词列表 [Word],每个单词都有自己的 WordView - word.wordView。 WordView 是显示的内容。 WordView 是 NSTextView 的子视图。

我试图覆盖 keydown,但它不允许我在文本视图中输入任何内容。

【问题讨论】:

    标签: swift xcode macos keydown nstextfield


    【解决方案1】:

    您必须通过 IB 或以编程方式将您的 textField nextKeyView 连接到下一个 textField:

    textField1.nextKeyView = textField2
    

    【讨论】:

    • 无法完成这项工作,但这听起来是个好主意。我的循环目前看起来像这样:previousWord.wordView.nextKeyView = word.wordView
    • 发现问题。我使用的是 NSTextView 而不是 NSTextField。 NSTextView 只是插入一个选项卡,而 NSTextField 移动到下一个 TextField。很有趣。
    • 非常感谢@Leo Dabus 这正是我需要的帮助!数周以来一直被这个问题困扰。
    • @Aaron 您可以设置 textField 委托并添加 textField 方法 controlTextDidChange 来监视用户文本输入并决定从那里去哪里。您可能需要将该信息存储在内存或磁盘中的某个位置。
    • 完美运行!再次感谢@Leo Dabus 的所有帮助!项目文件也有很大帮助!
    【解决方案2】:

    假设您想从 textView1 转到 textView2。首先设置委托:

    self.textView1.delegate = self
    

    然后实现委托方法:

    func textView(textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool {
        if commandSelector == "insertTab:" && textView == self.textView1 {
            self.window.makeFirstResponder(self.textView2)
            return true
        }
        return false
    }
    

    【讨论】:

    • 帮我理解在这种情况下“自我”是什么?视图控制器?
    • 我的 VC 创建了一个单词列表 [Word],每个单词都有自己的 WordView - word.wordView。 WordView 是显示的内容。 WordView 是 NSTextView 的子视图。
    • 当我将 func 放入 VC 时,它说:ViewController 没有成员 'window'
    • 'window' 是您的视图所在的窗口。self 是拥有 NSTextViews 的任何东西。它通常在视图控制器中,但不一定。
    • 试过了:self.window = self.view.window!它不起作用,返回零。关于如何引用 VC 的窗口的想法?
    【解决方案3】:

    如果您想在 Swift 中控制字段选项卡或使用箭头键在字段之间移动的方式,您可以将其添加到您的委托以及一些有意义的移动代码,通过在superview 明显显示在控件下方或右侧,并且可以接受焦点。

     public func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
            switch commandSelector {
            case #selector(NSResponder.insertTab(_:)), #selector(NSResponder.moveDown(_:)):
                // Move to the next field
                Swift.print("Move next")
                return true
            case #selector(NSResponder.moveUp(_:)):
                // Move to the previous field
                Swift.print("Move previous")
                return true
            default:
                return false
            }
            return false // I didn't do anything
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多