Какао - методы NSSearchFieldDelegate не вызываются
У меня есть простой NSSearchField по представлению NSVIewConroller. и подключил делегата NSSearchFIeld к контроллеру представления. И я реализовал методы NSSearcHFieldDelegate следующим образом:
- (void)searchFieldDidStartSearching:(NSSearchField *)sender NS_AVAILABLE_MAC(10_11);
{
NSLog(@"search field did start: %@", sender.stringValue);
}
- (void)searchFieldDidEndSearching:(NSSearchField *)sender NS_AVAILABLE_MAC(10_11);
{
NSLog(@"search field did end: %@", sender.stringValue);
}
Эти методы не вызываются при запуске и завершении редактирования. Но если я реализую делегаты по умолчанию NSControl, как controlTextDidChange:
а также control:textShouldBeginEditing:
вызываются на соответствующие события.
Почему методы NSSearchFieldDelegate не вызываются?..
1 ответ
Step 1: Your controller class needs to inherit from NSSearchFieldDelegate
Step 2: Implement the below 2 methods
func searchFieldDidStartSearching(sender: NSSearchField){
print("searchFieldDidStartSearching \(sender.stringValue)")
}
func searchFieldDidEndSearching(sender: NSSearchField){
print("searchFieldDidEndSearching \(sender.stringValue)")
}
Step 3: in the viewDidLoad, windowDidLoad, awakeFromNib etc set the delegate for the search field as the view controller/ window controller etc
self.searchField.delegate = self
Рабочий образец как ниже
// AppDelegate.swift
// NSSearchFieldDelegateSampleCode
// Created by Debasis Das on 27/05/16.
// Copyright © 2016 Knowstack. All rights reserved.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSSearchFieldDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var searchField:NSSearchField!
func searchFieldDidStartSearching(sender: NSSearchField){
print("searchFieldDidStartSearching \(sender.stringValue)")
}
func searchFieldDidEndSearching(sender: NSSearchField){
print("searchFieldDidEndSearching \(sender.stringValue)")
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
self.searchField.delegate = self
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}