背景ココアNSPopUpButtonCellは私が3列でNSTableViewを持って選択した値
を表示しない、そのうちの一つは、NSPopUpButtonCellを持っています。
データバインディングを使用してセルデータを埋め込むのに失敗しました。そのため、addItemsWithTitlesを使用してプログラムで値を設定することで新しいアプローチを試しています。
この方法では値をロードできませんでしたが、選択したデフォルト値を表示できませんでした(私の配列のインデックス0でも問題ありません)。また、ポップアップで選択した項目が表示されません。
バインディング問題
ドキュメンテーションは、バインディングを使用することをお勧めして、ポップアップでリレーショナル・データをロードするためにコアデータを使用した例を提供します。私のアプリは別に設定されていますが、私はまだアレイコントローラを使用しようとしましたが、popUpButtoncellのデータを入力しませんでした。
私のデータ構造は単純なクラスオブジェクトであり、コアデータはなく、このように見えます。
class Display: NSObject {
var name: String
var resolution: String
var availableResolutions: [String]
}
ドロップダウンに値を設定するには、availableResolutions配列を使用します。
テーブルの各行は、Displayオブジェクトのインスタンスを表します。 NSPopUpButtonCellが、その特定のDisplayのavailableResolutionsのリストに項目を表示するようにします。私はそれが各表示行の動的リストを持つことさえ可能かどうか分からない。私は私が私のNSPopUpButtonCellためにIBOutletを作成し、私はobjectValueForTableColumnとsetObjectValueでそれを参照しています
を試してみた何
。私は、objectValueForTableColumnの内部にavailableResultionsの配列を追加します。
@IBOutlet weak var popUpCell: NSPopUpButtonCell!
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return self.displays.count
}
func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? {
let display = displays[row]
if tableColumn!.identifier == "displayCell" {
return display.name
}
else if tableColumn!.identifier == "resolutionCell" {
return display.resolution
}
else {
self.popUpCell.addItemsWithTitles(display.availableResolutions!)
return display.availableResolutions
}
}
func tableView(tableView: NSTableView, setObjectValue object: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row: Int) {
if tableColumn!.identifier == "displayCell" {
displays[row].name = object as! String
}
else if tableColumn!.identifier == "resolutionCell" {
object as! String
}
else {
let index = object as! Int
if index >= 0 {
self.popUpCell.selectItemAtIndex(index)
self.popUpCell.synchronizeTitleAndSelectedItem()
}
}
}
私は何が欠けていますか? arrangedObjects
へ
バインド列のSelected Value
、resolution
:バインディングで
objectValueForTableColumnとsetObjectValueが呼び出されていますか?これらはセルベースのテーブルビューではありませんか?ほとんどの場合、ビューベースのテーブルビューがあります。 – user965972
セルベースのコンテンツモードが設定されています。私はobjectValueForTableColumnが呼び出されたことを確認することができます。実際に他の列のデータが移入されます。また、setObjectValueが呼び出され、テーブル内のデータを変更すると機能します。 –