2016-03-24 12 views
3

私はNSVIewConrollerの視点から単純なNSSearchFieldを持っています。ビューコントローラにNSSearchFIeldのデリゲートを接続しました。次のように私はNSSearcHFieldDelegateメソッドを実装している:Cocoa - 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メソッドが呼び出されていない?...

答えて

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 

ワーキングサンプルが

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


} 
以下の通りです
関連する問題