3

NSVIewConroller のビューに単純な NSSearchField があります。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 メソッドが呼び出されないのはなぜですか?..

4

1 に答える 1

2

ステップ 1: コントローラー クラスは NSSearchFieldDelegate から継承する必要があります

ステップ 2: 以下の 2 つの方法を実装する

    func searchFieldDidStartSearching(sender: NSSearchField){
        print("searchFieldDidStartSearching \(sender.stringValue)")
    }
    func searchFieldDidEndSearching(sender: NSSearchField){
        print("searchFieldDidEndSearching \(sender.stringValue)")
    }

ステップ 3: viewDidLoad、windowDidLoad、awakeFromNib などで、検索フィールドのデリゲートをビュー コントローラー/ウィンドウ コントローラーなどとして設定します。

 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
    }


}
于 2016-05-27T18:19:19.703 に答える