2017-01-09 13 views
0

NSTableViewDelegateプロトコルをいくつかのカスタムメソッドで展開したいと思います。たとえば、カスタムのNSTableViewサブクラスが、特定のイベントのデリゲートに通知する必要があります。別のプロトコルを作成するのではなく、既存のプロトコルをカスタムメソッドに追加することは可能ですか?ここで最善のアプローチは何でしょうか?NSTableViewDelegateプロトコルにメソッドを追加するには?

NSTableViewDelegateへの書き込みと拡張を試みましたが、メソッドが呼び出されましたが、この拡張では、デリゲートクラス(サブクラスNSViewController)にアクセスできません。コントローラーが特定の方法でイベントに応答する必要があるため、それはまったくのアイデアです。

したがって、どのようにしてNSTableViewDelegateプロトコルにメソッドを追加し、デリゲートクラスの実装を提供できますか?

冗長性のために申し訳ありません:)

例コード(プロジェクトに、それは少し異なりますが、考え方は同じです):

extension NSTableViewDelegate { 
    func didBecomeFirstResponder(_ tableView: NSTableView) { 
     isTableViewFirstResponder = true //warning: Use of unresolved identifier 'isTableViewFirstResponder' 
    } 

    func didResignFirstResponder(_ tableView: NSTableView) { 
     isTableViewFirstResponder = false //warning: Use of unresolved identifier 'isTableViewFirstResponder' 
    } 
} 

isTableViewFirstResponderは、デリゲートクラスのプロパティです。 スウィフトはどこを探すべきか分かりません。 isTableViewFirstResponderが宣言されているクラスを指定するにはどうすればよいですか?

+0

'しかし、この拡張では、私はデリゲートクラスにアクセスできない ' - あなたはこれを説明できますか?どのくらい正確にアクセスしたいですか?コードを追加する方が良いでしょう。 – user28434

+0

ご質問ありがとうございます。コードスニペットを追加しました。 –

+0

'NSTableViewDelegate'は' isTableViewFirstResponder'について知りません。私はデリゲートではなくNSTableViewを拡張したいと思う。 – shallowThought

答えて

1

このプロトコルにメソッドを追加することは可能ですが、代理人の責任はありません。しかし、実装は拡張であり、プロトコルに準拠するクラスに追加のメソッドを実装する明白な方法はありません。

1

NSTableViewDelegateプロトコルを拡張しているため、NSTableViewDelegateの実装に存在するものだけが表示されます。 isTableViewFirstResponderNSTableViewDelegateの実装に存在しないため、拡張にはわかりません。

Afaikエクステンションに格納されたプロパティを追加することはできません。したがって、余分なProtcolを導入しなければならないと思います。

protocol NSTableViewResponder { 
    var isTableViewFirstResponder: Bool {get set} 
} 

extension NSTableViewResponder { 
    mutating func didBecomeFirstResponder(_ tableView: NSTableView) { 
     isTableViewFirstResponder = true 
    } 

    mutating func didResignFirstResponder(_ tableView: NSTableView) { 
     isTableViewFirstResponder = false 
    } 
} 
+0

'isTableViewFirstResponder'はデリゲートクラスのプロパティです。私のテーブルビューのサブクラスは、質問に記載されている2つのメソッドを介して最初のレスポンダのステータスを取得/撤回することをそのデリゲートに通知し、デリゲートはプロパティのステータスをisTableViewFirstResponderブール値に格納する必要があります。私は、すべての通常の 'NSTableViewDelegate'メソッドのように、デリゲートクラスにこれら2つのメソッドを実装したいだけです。 –

+1

[isTableViewFirstResponder' [NSTableViewのドキュメント](https://developer.apple.com/reference/appkit/nstableviewdelegate)が見つかりません。 – shallowThought

+0

は、デリゲートのカスタムプロパティ(たとえば、 'MyViewController')であるためです。 –

関連する問題