2017-08-18 6 views
0

NSTableViewには1つの列しかなく、サブビューの値が異なります。 tableViewは、CoreDataエンティティにバインドされているNSArrayControllerによって設定されます。 カスタムボタンでtableViewをどのようにソートするのかと思いました。NSTableViewをNSArrayControllerでプログラム的にソートするにはどうすればいいですか?

class ViewController: NSViewController { 

    @IBOutlet var arrayController: NSArrayController! 

    @IBAction func sortByName(_ sender: Any) { 

     arrayController.sort... ? 
    } 

    @IBAction func sortByAge(_ sender: Any) { 

     arrayController.sort... ? 

    } 

} 

私は、行ヘッダーをクリックして列をソートする方法を知っています。しかし、私は1つのカラムしか持っていないので値が違うので、私はカスタムボタンでソートする方法を見つけようとしています。 ご協力いただければ幸いです。

+0

を呼び出すには、ソート・ディスクリプタを変更しようとしたことがありますか? – Abizern

答えて

1

アレイコントローラのsortDescriptorsプロパティを設定し、arrayController.rearrangeObjects()

class ViewController: NSViewController { 

    @IBOutlet var arrayController: NSArrayController! 

    @IBAction func sortByName(_ sender: Any) { 
     sortArrayController(by: "name") 
    } 

    @IBAction func sortByAge(_ sender: Any) { 
     sortArrayController(by: "age") 
    } 

    func sortArrayController(by key : String) { 
     arrayController.sortDescriptors = [NSSortDescriptor(key: key, ascending: true)] 
     arrayController.rearrangeObjects() 
    } 

} 
+0

まさに私が探していたものです。どうもありがとうございました! –

+0

'rearrangeObjects'を呼び出す必要はありません。' sortDescriptors'を設定するとそれが実行されます。 – Willeke

関連する問題