2013-09-05 7 views
0

Каков наилучший способ иметь ячейки NSTableView с несколькими линиями? Скажем, 5 или 6?OSX: ячейки NSTableView с несколькими линиями?

Я знаю об этом вопросе и ответе «iOS: UITableView cells with multiple lines?», но механизм, по-видимому, отличается от OSX.

+0

Можете ли вы быть более конкретной информацией о проблеме у вас? Если вы используете NSTableView, основанный на представлении, вы можете создать NSTableCellViews с произвольными аранжировками любых подзонов, которые вам нравятся в Interface Builder, очень похожим на то, что вы можете сделать на iOS. Это включает многострочные текстовые поля или несколько текстовых полей одной строки, расположенных в строках. –

+0

Я хотел избежать боли, чтобы использовать табличные представления, основанные на представлении ... – Colas

+0

Представления таблиц, основанные на просмотре, намного удобнее настраивать, чем виды табличных таблиц. Вы не избегаете боли, используя табличный вид на ячейке ... –

ответ

1

На основании этого ответа View-based NSTableView with rows that have dynamic heights:

В делегате ваша NSTableView:

@interface MenuDelegate() 

@property (nonatomic, weak) NSArrayController * theArrayController ; 

@property (nonatomic, strong) NSTextFieldCell * anExtraTextFieldCell ; 
@property (nonatomic) NSRect tallRect ; 

@end 



@implementation MenuDelegate 



#pragma mark - Initialisations 


- (id)initwithArrayController:(NSArrayController *)theArrayController; 
{ 
    self = [super init] ; 

    if (self) 
    { 
     self.theArrayController = theArrayController ; 

     self.anExtraTextFieldCell = [[NSTextFieldCell alloc] init] ; 
    } 

    return self ; 
} 



- (CGFloat)  tableView:(NSTableView *)tableView 
       heightOfRow:(NSInteger)row { 

    if (!self.tallRect.size.width) 
    { 
     NSTableColumn * firstColum = tableView.tableColumns[0] ; 
     self.tallRect = NSMakeRect(0, 0, firstColum.width, CGFLOAT_MAX); 
    } 

    // Access the content of the cell. 
    NSString * content = [self.theArrayController.arrangedObjects[row] valueForKey:@"title"] ; 
    self.anExtraTextFieldCell.stringValue = content ; 

    CGFloat result = [self.anExtraTextFieldCell cellSizeForBounds:self.tallRect].height + 5; 


    if (result < [tableView rowHeight]) 
    { 
     result = [tableView rowHeight] ; 
    } 

    return result ; 
} 
Смежные вопросы