Какао - методы 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
    }


}
Другие вопросы по тегам