2017-05-10 8 views
0

私は、他のビューと同様に、プログラムで作成されたNSSearchFieldの使用を含む新しいSwift(3.0)フレームワークを作成しています。 このframenworkのデプロイメントターゲットが10.10に設定されていて、デリゲートのmetodsを設定できないという奇妙なことが見つかりました。実際には、NSSearchFieldDelegateは10.11にのみ表示されます。ヨセミテのNSSearchFieldデリゲート

class PlistEditor: NSObject, NSOutlineViewDelegate, NSOutlineViewDataSource, NSTextFieldDelegate, NSSearchFieldDelegate { 
var searchField : NSSearchField? 
// more code.. 
init(tabItem: NSTabViewItem, 
     plistPath: String?) { 
     // more code.. 
     let sf = NSSearchField(frame: NSMakeRect(80, 0, 80, 22)) 
     self.searchField? = sf 
     // more code.. 
     super.init() 
     // more code.. 
     if #available(OSX 10.11, *) { 
      self.searchField?.delegate = self 
     } else { 
      // Fallback on earlier versions 

     } 

     // more code 
    } 

}

[OK]を、私はそれがNStextFieldから本来のだと思った、と多分私はセルにアクセスすることができますし、スーパークラスのデリゲートを使用して設定しますが、unfurtunately私はそれを行う方法を発見したことはできません。 私が必要とするのは、10.10でNSText/NSTextField通知を受信できることです。これどうやってするの? EDITED plist editor vibrant

error received

: がより行われている方法についての情報に加えて、あなたのクラスがNSSearchFieldDelegateに準拠していることを宣言するのを忘れ

+1

受信しているエラーは何ですか? – dirtydanee

+0

詳細と画像を追加しました。ありがとうございました – Mike97

答えて

1

の詳細情報を提供しないと、私は推測していますいくつかのピクト人を追加しました。

たとえば、viewControllerなどの設定方法の例を参照してください。あなたはあなたのVCのための拡張を作成し、デリゲートに準拠することを宣言します。

class SearchViewController: NSViewController { 
    let searchField: NSSearchField? = NSSearchField(frame: .zero) 

    override func viewWillAppear() { 
     super.viewWillAppear() 
     if #available(OSX 10.11, *) { 
      self.searchField?.delegate = self 
     } else { 
      // Fallback on earlier versions 

     } 
    } 
} 

extension SearchViewController: NSSearchFieldDelegate { 
    func searchFieldDidStartSearching(_ sender: NSSearchField) { 
     print("didStart") 
    } 

    func searchFieldDidEndSearching(_ sender: NSSearchField) { 
     print("didEnd") 
    } 
} 

EDIT:
のMac OSの以前のバージョンでtextDidChangeイベントをキャプチャするには、NSSearchFieldをサブクラス化しtextDidChange関数をオーバーライドする必要があります。 searchFieldで変更が発生するたびに、関数が呼び出されます。

class DLSearchField: NSSearchField { 

    override func textDidChange(_ notification: Notification) { 
     Swift.print("textDidChange") 
    } 
} 
+0

詳細情報を追加しましたが、展開ターゲットは10.10です。とにかくそれはうまくいくと思いますか?ありがとう – Mike97

+1

デリゲートを割り当てる前に 'if。#available(OSX 10.11、*)'チェックを追加するだけです。 '10.11'以上のものであれば動作します。 – dirtydanee

+0

はい、10.11とSierraではすでにうまく機能しています。私は何とかNSTextFieldCellに到達し、私にとっては十分であるべき古典的なNSTextFieldDelegateを設定する必要があると思います。可能なら。残念なことに、IBの仕事は期待どおりですが、ここではすべてがコード化されています。 – Mike97

関連する問題