如何将基于单元格的表转换为可可中的基于视图的表?

时间:2013-04-04 18:54:06

标签: objective-c macos cocoa nstableview nstablecellview

我很难理解如何在cocoa中实现基于视图的表。现在我正在实施老式的基于单元格的表。正如我想的那样,只需将NSTableCellView拖到NIB文件中的列上就不会使我的表基于视图了:)

我读完了这篇文章:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/TableViewOverview/TableViewOverview.html

但仍然无能......出于某种原因我的tableView:viewForTableColumn:row:方法没有被击中。

有人可以一步一步地解释我如何将基于单元格的表格转换为基于视图的表格?

在我的基于单元格的表中,我有:

// .h
#import "ObjectClass.h"
#import "ObjectTable.h"

@interface ObjViewController : NSObject <NSTableViewDataSource, NSTableViewDelegate>
{
    IBOutlet ObjectTable *objectTable;
    NSMutableArray *list;
    ObjViewController *current;
}  

//.m
#import "ObjViewController.h"

@implementation ObjViewController

-(id)init
{
   self = [super init];
   if (self)
   {
       current = self;
       list = [[NSMutableArray alloc] init];
   }

   return self;
}

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
{
    return [list count];
}

-(id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn
                                                               row:(NSInteger)row
{
    ObjectClass *obj = [list objectAtIndex:row];

    NSString *identifier = [tableColumn identifier];

    return [obj valueForKey: identifier];
}

// .h
@interface ObjectClass : NSObject
{
}
@property int categoryID;
@property int oID;
@property NSString *name;

@end

谢谢!

2 个答案:

答案 0 :(得分:2)

方法

tableView:viewForTableColumn:row:

来自NSTableViewDelegate协议,一旦实现,将使NSTableView成为基于视图的表。从上面的代码中,视图控制器不符合NSTableViewDelegate协议。

答案 1 :(得分:1)

确保您已在IB(属性检查器)中更改了表格的内容模式。您想要基于视图,而不是基于单元格。