2

TableViewのrowHeightを定義するときに、NSTableCellViewのtextFieldのテキストが切り取られるというCocoaの問題が発生しています。すべての要素がプログラムで作成されていることに注意してください。私はCocoaに少し慣れていませんが、下にあるものの多くが犬の朝食の品質を下回っている可能性があることを認識しており、提案を歓迎します。

私のテーブルは次のように作成されます。

 ....
 NSScrollView * tableContainer = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, returnView.frame.size.width, 100)];
 NSTableView * tableView = [[NSTableView alloc] initWithFrame:NSMakeRect(0, 0, tableContainer.frame.size.width, 100)];
 [tableView setRowHeight:30];
 NSLog(@"tableView was created with a row height of %f", [tableView rowHeight]);
 ....

viewForTableColumnメソッド内で、次のことを行います。

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

// get an existing cell with the MyView identifier if it exists

NSTableCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self];

// There is no existing cell to reuse so we will create a new one
if (result == nil) {

    result = [[NSTableCellView alloc] initWithFrame:NSMakeRect(0, 0, tableView.bounds.size.width, [tableView rowHeight])];

    // the identifier of the NSTextField instance is set to MyView. This
    // allows it to be re-used
    result.identifier = @"MyView";
}

// result is now guaranteed to be valid, either as a re-used cell
// or as a new cell, so set the stringValue of the cell to the
// nameArray value at row
NSLog(@"tableView row height is %f", [tableView rowHeight]);
NSLog(@"Cell bounds is {%f,%f} %f x %f", result.bounds.origin.x, result.bounds.origin.y, result.bounds.size.width, result.frame.size.height);
NSTextField *cellTF = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, result.bounds.size.height)];
NSLog(@"TextField size is {%f,%f} %f x %f", cellTF.frame.origin.x, cellTF.frame.origin.y, cellTF.frame.size.width, cellTF.frame.size.height);
[result addSubview:cellTF];
result.textField = cellTF;
[cellTF setBordered:NO];
[cellTF setEditable:NO];
[cellTF setDrawsBackground:NO];
result.textField.stringValue = @"hello";

NSLog(@"cell string value is now %@", [[result textField] stringValue]);

return result;

}

私のログ出力は次のとおりです(編集された各行の重複ログエントリ):

WHCCConnect[26394:f07] tableView was created with a row height of 30.000000
WHCCConnect[26394:f07] tableView row height is 30.000000
WHCCConnect[26394:f07] Cell bounds is {0.000000,0.000000} 200.000000 x 30.000000
WHCCConnect[26394:f07] TextField size is {0.000000,0.000000} 100.000000 x 30.000000
WHCCConnect[26394:f07] cell string value is now hello row!

画面上の実際の結果:

ここに画像の説明を入力してください

ただし、テーブルの作成時にrowHeightを指定しない場合は、次のようになります。

    NSScrollView * tableContainer = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, returnView.frame.size.width, 100)];
    NSTableView * tableView = [[NSTableView alloc] initWithFrame:NSMakeRect(0, 0, tableContainer.frame.size.width, 100)];
    //[tableView setRowHeight:30];

これを出力として取得します(編集された各行の重複ログエントリ):

WHCCConnect[26458:f07] tableView was created with a row height of 17.000000
WHCCConnect[26458:f07] tableView row height is 17.000000
WHCCConnect[26458:f07] Cell bounds is {0.000000,0.000000} 203.000000 x 17.000000
WHCCConnect[26458:f07] TextField size is {0.000000,0.000000} 100.000000 x 17.000000
WHCCConnect[26458:f07] cell string value is now hello row!

結果のテーブルは次のようになります。

ここに画像の説明を入力してください

私は何が間違っているのですか?これらのブラストされた行を適切なサイズにするにはどうすればよいですか?

4

1 に答える 1

3

デリゲートメソッドを試しましたか:

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row;
于 2012-11-29T17:14:08.510 に答える