2017-07-08 7 views
-2

私はテーブルビューにデータを追加するために使用することができる2つのNSTableViewが含まれているクラスNSViewController、およびNSPageControllerを、持っています。 reloadData()からNSPageControllerに電話をかけて、NSViewControllerのテーブルビューを更新するにはどうすればよいですか?別のクラスからreloaddata()を呼び出す方法は?

更新:

私はすでにデリゲートでこれを解決しようとしたと私はすでにObjective-Cでこれを行っているが、迅速に、私は完全に失われた感じ。

私のPageControllerではのtableViewを更新する必要があること、のViewControllerを通知する必要があります。

class ViewController: NSViewController, PageControllerDelegate { 
... 

func updateTableView() { 
     self.tableView.reloadData() 
} 
:だから私は、私は次の行を追加したテーブルビューを保持している私のViewControllerに私のPageControllerでの

protocol PageControllerDelegate { 
    func updateTableView() 
} 

weak var delegate: PageControllerDelegate? 

をこのコードを追加しました

Xcode gi私は次のエラーをVES:

  • 「弱い」唯一のクラスとクラスが結合したプロトコルタイプではなく、「PageControllerDelegate」
  • タイプとプロパティ「デリゲート」にも適用することができる「PageControllerDelegate?」タイプ 'NSPageControllerDelegate?'のプロパティをオーバーライドすることはできません。 (別名「オプション」)
+0

通知?参照とメソッド呼び出し? KVO?ソースコードなしで具体的なアドバイスをするのは少し難しいです。 – Ssswift

答えて

1

私はあなただけの一般的な答えを与えることができます。

まず、View Controllerの連絡先が必要です。 NSTableViewControllerまたは定義したもの(プロトコル)のように。

あなたはテーブルビューコントローラを使用して、実施例、:あなたが契約にビューコントローラを使用した場合、

(viewController as? NSTableViewController)?.tableView.reloadData() 

そして例を:

接触を:

protocol HasTableView { 
    var tableView: NSTableView? { get } 
} 

ビューコントローラ契約に準拠:

class ExampleViewController: NSViewController, HasTableView { 
    var tableView: NSTableView? { return myTableView } 
    ... 
} 

そして、あなたのリロードデータの呼び出し:

(viewController as? HasTableView)?.tableView?.reloadData() 

は、それが役立ちます願っています。

0

行うための簡単な方法、あなたのコントロール階層に応じて - あなたのNSViewControllers、あなたのコントローラを保持し、その後、当社のコントローラクラスweak var delegate: NSViewControllerDelegateを与え、そして

NSViewControllerDelegate: AnyObject { 
    func controllerShouldUpdateTableView(_ controller: NSController) 
} 

`プロトコルを定義するには、あなたのNSViewControllerが、このプロトコルに準拠している場合コントローラーにデリゲートを設定してください。テーブルをリロードする必要があるときにこの関数を呼び出すだけです。

+0

あなたの答えをありがとう。私の最初の短い質問のために申し訳ありません。私はデリゲートでこれを解決したいが、私は間違ったことをしなければならない。だからあなたの答えの助けを借りてもう一度試してみましたが、いくつかのエラーが出ました(更新された質問を参照)。 – northsea

+0

'PageControllerDelegate'を' AnyObject'からサブクラス化しようとしてみましょう。 - 'PageControllerDelegate:AnyObject' – cloudcal

+0

ありがとう。私が 'protocol MyPageControllerDelegate:AnyObject {func updateTableData()} 'を書くとき、'私はまだエラーを受け取ります:' MyPageControllerDelegate?タイプ 'NSPageControllerDelegate?'のプロパティをオーバーライドすることはできません。 (別名 'Optional ') ' – northsea

関連する問題