すべてのデータを保持する NSDictionary があります。
- 1 つのタイトル (この質問では重要ではありません)
- 1 つのリンク (この質問では重要ではありません)
- 1 つのタイトルと 1 つのリンクを含む NSDictionary の 1 つの配列
このデータを次のようなビュー ベースのテーブル ビューに表示しています。
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tv
{
if (tv == _downloadTable)
//I use this "if" because I have another tableView that has nothing to do
//with this one
{
return [[myDictionary objectForKey:@"myArray"] count];
}
}
これには 2 つの列が必要ですtableView
。1 つはタイトルを表示し、もう 1 つはチェックボックスを表示します。これにより、どの行がチェックされているかがわかります。
- (NSView *)tableView:(NSTableView *)tv viewForTableColumn :(NSTableColumn *)tableColumn row :(NSInteger)row
{
if (tv == _downloadTable)
{
if (tableColumn == _downloadTableTitleColumn)
{
if ([[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"])
{
NSString *title = [[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"];
NSTableCellView *result = [tv makeViewWithIdentifier:tableColumn.identifier owner:self];
result.textField.stringValue = title;
return result;
}
}
if (tableColumn == _downloadTableCheckColumn)
{
NSLog(@"CheckBox"); //I wanted to see exactly when that was called
//But it didn't help me :(
NSButton *button = [[NSButton alloc]init];
[button setButtonType:NSSwitchButton];
[button setTitle:@""];
return button;
}
}
}
今、それを実行してチェックボックスをクリックしても何もしません(もちろん、何かをさせる方法がわからないためです。何かをするコードをどこに置くべきですか?
主な目標は、ダウンロードの編集可能なリストです。現在、リストが表示され、各行のタイトルのすぐ横にチェックボックスがあります。どのチェックボックスがチェックされていて、どれがチェックされていないかを知りたいです。
私はこれを試しました:
[button setAction:@selector(checkBoxAction:)];
- (void)checkBoxAction: (id)sender
{
NSLog(@"I am button : %@ and my state is %ld", sender, (long)[sender state]);
}
しかし、このチェックボックスに関連付けられているタイトルを知るために、そのボタンの行を取得する方法がわかりません。
setObjectValue
の方法も試しましたtableView
が成功しませんでした。
私がそれを機能させたい方法は次のとおりです。
各チェックボックスがチェックされているかどうかを確認し、チェックされた行のみで次のアクション (ダウンロード) を起動する「ダウンロード開始」ボタンがあります。
iOSでも動作させる予定であり、iOS用に別のコードを持ちたくないので、バインディングを避けたいと思います。