简体   繁体   中英

How can I display all object values in one NSTableCellView?

I have a Product object but as of right now I can only print one of its values in each table cell view. I want to display all the contents of my object in one cell. When I try to add another value it only grabs the last cellView that I create. How can I fill my cell with all my object values?

#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

In case anyone cares...You have to create a Custom cell and give your Custom cell class labels and assign the values of your object to the labels. Make sure to import your new Custom class into your view controller. Now each cell can be customizable with as many labels, images, and content from your database/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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM