0

状況:

メインテーブルとセカンダリテーブルの2つのテーブルがあります。メインテーブルはコアデータデータベースに接続されています。コアデータとメインテーブルを希望どおりに設定しました。すべてが正常に機能していて、満足しています。

次に、2番目のテーブルに列を追加する必要があります。基本的に、2番目のテーブルビューには単一の列があります(画像とテキストのテーブルセルビュー)。最初のテーブルビュー(コアデータの配列コントローラーに接続されているもの)の各行にチェックボックス列として列を追加する必要があります。この列のヘッダーには、arrangedobjects.headerに値が格納されている必要があります。しかし、これはそうではありません。これらの新しい列は、特定の順序である必要があります。最初のテーブルのarrangedobjects.order値に基づいて、昇順です。

これは、インターフェイスの更新ボタンを押すたびに実行する必要があります。

したがって、質問は次のとおりです。

-最初のテーブルビューの行数に基づいて、2番目のテーブルビューに列を追加するにはどうすればよいですか?

-最初のテーブルビューの列に格納されている値に基づいて列を並べ替えるにはどうすればよいですか?

-プログラムで列をチェックボックス列に設定するにはどうすればよいですか?

-列ヘッダーをarraycontrollerに格納されている値にプログラムで設定するにはどうすればよいですか?

望ましい結果の例:

表1(コアデータに接続)

 somecolumn | header | order | somecolumn | somecolumn
 ------------------------------------------------------
 text        hd1       3       text         text
 text        hd3       1       text         text
 text        hd4       7       text         text

表2の構造:(最初のチェックボックス列を除くすべてのチェックボックス列、表1の「順序」フィールドに基づく列の順序、表1の「ヘッダー」に基づく列ヘッダー)

 existingcolumn | hd3 | hd1 | hd4

繰り返しになりますが、できるだけ明確にしてください。

ありがとうございました

よろしくお願いします

イゴール

私は過去に同じような質問をしましたが、これにはもっと多くの内容が含まれているので、新しい質問を始めています。Webを検索しましたが、この特定の質問に対する答えは見つかりませんでした。また、私はObjective-c / cocoaプログラミングの初心者であることを忘れないでください。そのため、回答を明確にしてください。

4

1 に答える 1

1

-最初のテーブルビューの行数に基づいて、2 番目のテーブル ビューに列を追加するにはどうすればよいですか?

動的列を作成します。[tableView addTableColumn];rows.count のループ内で使用できます

-最初のテーブルビューの列に格納された値に基づいて列を並べ替えるにはどうすればよいですか?

注文とは...OrderBy? ソート済み、テーブルビューをソートすることはありません。モデル配列をソートします。配列をソートし、テーブルに入力します。

-プログラムで列をチェックボックス列に設定するにはどうすればよいですか?

チェックボックスの実装については、ここでプロジェクトを見つけてください。

チェックボックスを入れたい列にcheckBoxCellを描画します。または、プログラムで実行できます。

IBでやりました。

各(行数)チェックボックスの状態を格納する配列を作成する必要があります。

- (id)init {
    self = [super init];
    if (self) {

        states=[[NSMutableArray alloc] initWithObjects:@"1", @"0", @"1", nil];
    }
    return self; }



- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    NSLog(@"Num of rows---- %ld", [names count]);
    return [names count];
}

値が「check」の tableIdentifier を確認します。

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    if ([[tableColumn identifier] isEqualTo:@"name"]) {
        return [names objectAtIndex:row];
    }
    else if ([[tableColumn identifier] isEqualTo:@"check"]) {

        return [states objectAtIndex:row];
    }
    else if ([[tableColumn identifier] isEqualTo:@"states"]) {
        return [states objectAtIndex:row];
    }
    return 0;
}

オン/オフに従ってチェックボックスの値を更新します。

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [states replaceObjectAtIndex:row withObject:value];
    [tableView reloadData]; 
}

列ヘッダーを配列コントローラーに格納されている値にプログラムで設定するにはどうすればよいですか?

このカテゴリを使用するか、1 行のステートメントを使用できます。

@interface NSTableColumn(SetTitle)

- (void)setTitle:(NSString *)inTitle
{
    [[self headerCell] setStringValue:inTitle] ;
    [[[self tableView] headerView] setNeedsDisplay:YES];
}

@end

編集:

プログラムによるチェックボックス:

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSButtonCell *cell=[[NSButtonCell alloc] init];
    NSString *strDisplayPlaylistName;
    strDisplayPlaylistName=[playListNameArray objectAtIndex:row];
    [cell setTitle:strDisplayPlaylistName];
    [cell setAllowsMixedState:YES];
    [cell setButtonType:NSSwitchButton];
    return cell; 
}


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {          
    NSCell *aCell = [aTableColumn dataCellForRow:rowIndex];
    [aCell setNextState];
    //NSCell *aCell=[aAddedCells objectAtIndex:rowIndex];
    //[aCell setNextState];
}
于 2013-01-29T14:19:51.870 に答える