7

カスタム NSTableCellViews で NSTableview を作成したいと思います。

これが私が今持っているものです:

  • CustomCell.xibというセル (ビュー nib) の nib ファイル
  • CustomCellというセルのカスタム クラス
  • そして私のAppDelegate.mのコード:

ここでは、テーブル ビューをプログラムで作成します。

    NSScrollView *tableContainer = [[NSScrollView alloc]initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)];
    NSTableView *tableView = [[NSTableView alloc] initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)];

    NSTableColumn *firstColumn = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];
    [[firstColumn headerCell] setStringValue:@"First Column"];
    [tableView  addTableColumn:firstColumn];

    tableView.dataSource = self;
    tableView.delegate = self;
    [tableContainer setDocumentView:tableView];
    tableContainer.autoresizingMask = NSViewHeightSizable | NSViewMinXMargin;
    [self.window.contentView addSubview: tableContainer];

カスタム セル コードを配置するデリゲート メソッドは次のとおりです。

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {


    // In IB the tableColumn has the identifier set to the same string as the keys in our dictionary
    NSString *identifier = [tableColumn identifier];

    if ([identifier isEqualToString:@"myCell"]) {

        // We pass us as the owner so we can setup target/actions into this main controller object
        CustomCell *cellView = [tableView makeViewWithIdentifier:identifier owner:self];
        // Then setup properties on the cellView based on the column
        cellView.textField.stringValue = @"Name";
        return cellView;
    }
    return nil;
}

カスタム セルの nib ファイルでは、 NSTableCellViewをサブクラス化するCustomCellというカスタム クラスを使用してセル ビューを接続しました。今のところ、他の手順は行っていません。したがって、私のCustomCell.mは単なるデフォルトの初期化コードです。私はそれに触れていません。そして、私は nib ファイルで他に何もしなかったので、ファイルの所有者などを変更しませんでした。誰でも助けてくれますか?Apple のドキュメントからサンプル ファイルを調べましたが、何日も調査を行った後、解決策が見つかりませんでした。お役に立てれば幸いです。

4

2 に答える 2

1

カスタム NSTableViewCell サブクラスを持つために NSTableView をサブクラス化する必要はありません。ビューベースのテーブル ビューの使用を検討することもできます...

于 2013-01-05T13:26:21.870 に答える