8

すべてのデータを保持する 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用に別のコードを持ちたくないので、バインディングを避けたいと思います。

4

2 に答える 2

3

NSTableViewメソッドを使用して-rowForView:、特定のビューが含まれる行を取得できます。

あなたの場合、次のようなものがあります:

- (void)checkBoxAction:(id)sender
{
    NSInteger row = [_downloadTable rowForView:sender];
    NSLog(@"The button at row %ld was clicked.", row);
}

のドキュメントは次のNSTableViewとおりです。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

于 2013-03-25T00:15:53.387 に答える
1

ボタンのタグ プロパティを使用して、テーブルビューに番号 (場所) として配置するボタンごとに設定することができます。ここを見て!!!

UITableViewでどのUIButtonが押されたかを検出する

[編集1]

人々が実際にリンクされた投稿を読むことにした場合、答えが実際にそこにあることに気付くでしょう.

追加してみてください:

[button setTag:row];
[button addTarget:self action:@selector(checkBoxAction:) forControlEvents:UIControlEventTouchUpInside];

あなたのviewForTableColumnルーチンのelse内:

checkBoxAction ルーチンで:

- (void)checkBoxAction: (id)sender{
   NSLog(@"I am button : %@ and my state is %@", sender.tag, [sender state]);
}

また、コードをさらに掘り下げ始めると、TableViewCell オブジェクトの自動デキュー機能を使い始めることになると思います。メモリの割り当て/割り当て解除の問題に直面することになると思います。

于 2012-06-27T22:27:01.190 に答える