NSTableView with multiple columns

What is an easy way to customize my NSTableView with multiple columns to only display specific data in a single column. I have IBOutlets, but I don’t know where to go from there.

+3
source share
2 answers

Assuming you are not using Cocoa Bindings / Core Data, you can display data in NSTableView by implementing two methods from NSTableViewDataSource . Typically, your controller will implement the protocol, so open the .m file of the controller file and add these methods to the controller @implementation:

- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
  return 25;  // fill this out
}

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  return row % 3 ? @"Tick..." : @"BOOM!";  // fill this out
}

table dataSource . Builder dataSource. , .

, IBOutlet NSTableColumn * ; explosiveColumn. Interface Builder , , explosiveColumn. tableView: objectValueForTableColumn: row: , column , :

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  if (column == explosiveColumn) {
    return row % 3 ? @"Tick..." : @"BOOM!";
  } else {
    // other columns blank for now
    return nil;
  }
}

: http://www.cocoadev.com/index.pl?NSTableViewTutorial

+7

:

#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
    if (tv == racerTableView)
        return [racerList count];
    else if (tv == vehicleTableView)
        return [vehicleList count];
    else
        return 0; // something wrong here...
}

- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
        row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView){
        NHRacers *racer = [racerList objectAtIndex:rowi];
        return [racer valueForKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        return [vehicle valueForKey:colid];
    }
    else
        return 0; // something wrong here...
}

- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView) {
        NHRacers *racer = [racerList objectAtIndex:rowi];
        [racer setValue:obj forKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        [vehicle setValue:obj forKey:colid];
    }
    else
        nil; // something wrong here...    
    [self updateChangeCount:NSChangeDone];
}

tableview , VehicleTableView racerTableView "Table View" IB. colid ( IB, "", "Identity Inspector" ). KVC ( ) , : (. Apple docs ).

: ( NHVehicles.h)

@interface NHVehicles : NSObject
{
    NSUInteger entry;
    NSString *name;
    NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end

( NHVehicles.m)

@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end

View, "entry", "name" "vehicleClass" ( ) .

, . : Xcode 4.5.1, , , , , ( , ). , .

0

Source: https://habr.com/ru/post/1731485/


All Articles