2016-03-24 5 views
3

Ich habe einfache NSSearchField auf NSViewConroller anzeigen. und verband den NSSearchField-Delegaten mit dem View-Controller. Und ich habe die NSSearcHFieldDelegate Methoden wie folgt umgesetzt:Cocoa - NSSearchFieldDelegate Methoden heißt nicht

- (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); 

} 

Diese Methoden sind nicht auf Bearbeitung starten und Ende Bearbeitung genannt zu werden. Aber wenn ich die NSControl-Standard-Delegaten wie controlTextDidChange: und control:textShouldBeginEditing: implementieren, werden entsprechende Ereignisse aufgerufen.

Warum werden die NSSearchFieldDelegate Methoden nicht genannt? ..

Antwort

2
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 

Eine Arbeitsprobe ist als unten

// 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 
    } 


}