#swift #xcode #macos
#swift #xcode #macos
Вопрос:
У меня есть приложение для macOS, использующее Xcode 11 для разработки, и у меня есть слабая переменная @IBOutlet searchTextField: NSSearchField! в моем классе view controller для фильтрации табличного представления. Кроме того, у меня есть опции меню для этого поля поиска. Этот код работает нормально. Тем не менее, я хотел бы перенести эту функцию поиска на панель инструментов. Итак, я добавил элемент панели инструментов поиска на панель инструментов и перетащил его с помощью CTRL первому ответчику и подключил его к функции @IBAction. Но я не знаю, как поступить. Какие шаги необходимо выполнить для реализации функции поиска на панели инструментов. Пожалуйста, посоветуйте.
Комментарии:
1. Связано ли действие поля поиска в контроллере представления с действием этого контроллера представления? К какому действию подключено поле поиска на панели инструментов?
2. Поле поиска, которое находится в коде контроллера представления: IBOutlet weak var searchTextField: NSSearchField!». Весь рабочий код использует это поле. Действие для действия поля поиска панели инструментов — IBAction func searchCustomer(_ obj: NSSearchField) { print(«Поиск выбран») .. Когда я сказал «первый ответчик», я имел в виду первого ответчика IB.
3. Какой класс реализует
searchCustomer
? Используете ли вы выход за пределыNSSearchFieldDelegate
и методы действия поля поиска?4. Является ли контроллер представления контроллером представления содержимого окна?
5. Да, контроллер представления является контроллером представления содержимого для окна, и именно в этом классе у меня есть IBAction searchCustomer.
Ответ №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)")
}
}