【问题标题】:How to use search item in the toolbar?如何使用工具栏中的搜索项?
【发布时间】:2020-09-17 11:32:18
【问题描述】:

我有一个使用 Xcode 11 进行开发的 macOS 应用程序,我有一个 @IBOutlet weak var searchTextField: NSSearchField!在我的视图控制器类中过滤表视图。另外,我有这个搜索字段的菜单选项。这段代码工作正常。但是,我想将此搜索功能移至工具栏。因此,我在工具栏中添加了一个搜索工具栏项,并按住 CTRL 键将其拖动到第一响应者并将其连接到 @IBAction 函数。但我不知道如何进行。在工具栏中实现搜索功能所需的步骤是什么。请指教。

【问题讨论】:

  • 视图控制器中搜索字段的动作是否与该视图控制器的动作相关联?工具栏中的搜索字段与哪个操作相关联?
  • 视图控制器代码中的搜索字段是:IBOutlet weak var searchTextField: NSSearchField!"。所有工作代码都使用该字段。工具栏搜索字段操作的操作是 IBAction func searchCustomer (_ obj: NSSearchField) { print("Search Selected") .. 当我说第一响应者时,我指的是 IB 的第一响应者。
  • 哪个类实现了searchCustomer?你有使用NSSearchFieldDelegate之外的outlet和搜索字段的动作方法吗?
  • 视图控制器是窗口的内容视图控制器吗?
  • 是的,视图控制器是窗口的内容视图控制器,它在这个类中,我有 IBAction searchCustomer。

标签: swift xcode macos


【解决方案1】:

我从另一个用户那里得到了这个。这正是我想要的。

//  ViewController.swift
// This assumes the search field is first in the toolbar
import Cocoa

class ViewController: NSViewController {

    override func viewWillAppear() {
        
        guard let toolbar = self.view.window?.toolbar else {
            return
        }
                
        guard let searchFieldToolbarItem = toolbar.items.first else {
            return
        }

        guard let searchField = searchFieldToolbarItem.view as? NSSearchField else {
            return
        }
                
        searchField.target = self
        searchField.action = #selector (procSearchFieldInput (sender:))
    }
    
    @objc func procSearchFieldInput (sender:NSSearchField) {
        print ("\(#function): \(sender.stringValue)")
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2020-03-23
    • 2016-05-06
    • 2011-07-26
    • 2011-07-17
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多