1

NSBrowser(10.6SDK / Cocoaアプリ)を使用していて、ブラウザーの列にメッセージを送信して、その列内の最大のセルの幅に一致するように幅のサイズを変更したいと思います。

方法があるはずなのに、概念的にはかなり基本的なようですが、そうではありません。

ここの誰かが前にこれに取り組んでいますか?どのようにそれを解決しましたか?コードサンプル?

//更新drop-supportを追加しました。コードは機能しますが、列の新しい項目が適合しません(楕円があります)。

-(BOOL) browser:(NSBrowser *)browser acceptDrop:(id <NSDraggingInfo>)info atRow:(NSInteger)row column:(NSInteger)column dropOperation:(NSBrowserDropOperation)dropOperation
 {
NSPasteboard* pboard = [info draggingPasteboard];
NSData* rowData = [pboard dataForType:CMCourseDataType];
NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];

NSArray *selectedCourses = [[self coursesArrayController] selectedObjects];
Group *selectedGroup = [[self allGroupsArray] objectAtIndex:row];

[selectedGroup addCourses:[NSSet setWithArray:selectedCourses]];
[browser reloadColumn:1];

/ *新しいコードを以下で試しました。列1の幅のサイズを変更しましたが、影響はありません* /

[browser sizeToFit];
[[browser matrixInColumn:1] sizeToCells];   

awakeFromNibで、次のように設定します。

[browser setColumnResizingType:NSBrowserUserColumnResizing];

ありがとう

4

3 に答える 3

0

これに対する便利な解決策を見つけることができませんでしたが、かなりうまく機能するシステムを実装しました。

  1. 列幅の変更可能な配列を保持します。
  2. browser:willDisplayCell:atRow:column:デリゲート メソッドを実装します。
  3. テーブルに新しいコンテンツを追加するときは、新しい列インデックスの列幅配列の値を 0 に設定します。
  4. デリゲートが呼び出されると、willDisplayCell各セルの幅を計算します。NSTextFieldCells の場合、次を使用しました。CGFloat cellWidth = [((NSTextFieldCell *)cell).attributedStringValue size].width + 40.0f;
  5. 計算されたセル幅が格納された列幅より大きい場合は、格納された値を に設定し、新しい値で NSBrowser をcellWidth呼び出します。setWidth:forColumn:
于 2015-01-22T20:07:28.290 に答える
0

これを試して:

NSBrowser *browser; //Browser containing columns
NSInteger index; //Index of column to resize
[[browser matrixInColumn:index] sizeToCells];

または、ブラウザ全体のサイズを変更したい場合は、次のことを試すことができます。

[browser sizeToFit];
于 2010-12-19T21:54:21.037 に答える