如何在一个NSTableCellView中显示所有对象值?

时间:2016-09-23 15:48:52

标签: objective-c cocoa nstableview nstablecellview

我有一个Product对象,但截至目前我只能在每个表格单元格视图中打印其中一个值。我想在一个单元格中显示我的对象的所有内容。当我尝试添加另一个值时,它只抓取我创建的最后一个cellView。如何用我的所有对象值填充单元格?

#import "ProductsViewController.h"
#import "Product.h"


@interface ProductsViewController () <NSTableViewDataSource, NSTableViewDelegate>

@end

@implementation ProductsViewController

@synthesize jsonArray, productsArray;


- (IBAction)tableView:(NSTableView *)sender {


}


- (void)viewDidLoad {
[super viewDidLoad];


[self retrieveData];



}


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


- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
static NSString *cellIdentifier = @"cell";

NSTableCellView *cellView = [tableView makeViewWithIdentifier:cellIdentifier owner:self];

if (cellView == nil)
{
    NSLog(@"A cell");

    cellView = [[NSTableCellView alloc] init];
    [cellView setIdentifier:cellIdentifier];
}
Product * productObject;
productObject = [productsArray objectAtIndex:row];


cellView.textField.stringValue = productObject.product_name;

return cellView;
}



- (void) retrieveData{

NSString * url = @"myurl";

NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

NSString *DataResult = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",DataResult);


jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

productsArray = [[NSMutableArray alloc] init];


for(int i = 0; i < jsonArray.count; i++){

    NSString * pID          = [[jsonArray objectAtIndex:i] objectForKey:@"id"];
    NSString * pName        = [[jsonArray objectAtIndex:i] objectForKey:@"product_name"];
    NSString * pPrice       = [[jsonArray objectAtIndex:i] objectForKey:@"product_price"];
    NSString * pDescription = [[jsonArray objectAtIndex:i] objectForKey:@"product_description"];
    NSString * pImage       = [[jsonArray objectAtIndex:i] objectForKey:@"product_image"];
    NSString * pDownload    = [[jsonArray objectAtIndex:i] objectForKey:@"product_download"];
    NSString * pVideo       = [[jsonArray objectAtIndex:i] objectForKey:@"product_video"];
    NSString * pFeatured    = [[jsonArray objectAtIndex:i] objectForKey:@"featured"];


    [productsArray addObject:[[Product alloc] initWithProduct_Name: pName andProduct_Price:pPrice andProduct_Description:pDescription andProduct_Image:pImage andProduct_Download:pDownload andProduct_Video:pVideo andProduct_Featured:pFeatured andProduct_ID:pID]];
}




}

@end

1 个答案:

答案 0 :(得分:0)

如果有人关心...您必须创建自定义单元格并提供自定义单元格类标签并将对象的值分配给标签。确保将新的Custom类导入视图控制器。现在,每个单元格都可以使用数据库/ API / JSON中的标签,图像和内容进行自定义。

<强> Custom.h

#import <Cocoa/Cocoa.h>

@interface Custom : NSTableCellView

@property (weak) IBOutlet NSTextField *label1;

@property (weak) IBOutlet NSTextField *label2;

@end

<强> Custom.m

#import "Custom.h"

@implementation Custom

@synthesize label1, label2;

@end

<强>的TableView

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
static NSString *cellIdentifier = @"cell";

Custom *cellView = [tableView makeViewWithIdentifier:cellIdentifier owner:self];

if (cellView == nil)
{
    NSLog(@"A cell");

    [cellView setIdentifier:cellIdentifier];
}



Product * productObject;
productObject = [productsArray objectAtIndex:row];

cellView.textField.stringValue = productObject.product_image;
cellView.label1.stringValue = productObject.product_name;
cellView.label2.stringValue = productObject.product_price;




return cellView;
}