标签:cocoa objective-c 界面 nstableview
1.首先在MainMenu.lib文件里面创建一个NSTableView,在界面上显示一个表格出来,并对表格进行设置。
2.创建文件TableViewDelegate.h和TableViewDelegate.m(文件内容如下文件所示)。并在MainMenu.lib文件中创建一个Object(从窗口右边选中Object,拉到在Window中的对话框中),命名:TableViewDelegate.
3.设置代理:tableView 进行设置,和图片中的Table View进行连接。
staticField 与窗口中的标签控件进行连接。
把dataSource 和delegate 代理给TableViewDelegate。
(如下图所示)
表格数据与定义数据要一致。
每一列的Identifier要与MqjTableData中定义的变量的名称要一样。
如第一列Identifier设置为:phoneID, 在MqjtableData中定义的变量就是NSString *phoneID。
其他列,同理。
MqjTableData.h
#import <Cocoa/Cocoa.h> @interface MqjTableData : NSObject { NSString *phoneID; NSString *phoneName; NSString *phoneNumber; } @property (readwrite,copy) NSString *phoneID; @property (readwrite,copy) NSString *phoneName; @property (readwrite,copy) NSString *phoneNumber; @end
#import "MqjTableData.h" @implementation MqjTableData @synthesize phoneID; @synthesize phoneName; @synthesize phoneNumber; @end
TableViewDelegate.h
#import <Cocoa/Cocoa.h> @interface TableViewDelegate : NSObject { NSMutableArray *tableDataArray; IBOutlet NSTableView *tableView; IBOutlet NSTextField *staticField; } @end
TableViewDelegate.m
#import "TableViewDelegate.h" #import "MqjTableData.h" @implementation TableViewDelegate -(id) init { [super init]; if(self) { tableDataArray = [NSMutableArray new]; } return self; } -(void) awakeFromNib { [self loadTableData]; } -(void)loadTableData { NSString *name = @"aaaa"; NSString *number =@"13645897845"; for (int i = 1; i<= 10; ++i) { NSAutoreleasePool *pool = [NSAutoreleasePool new]; MqjTableData *tableData =[MqjTableData new]; [tableData setPhoneID:[NSString stringWithFormat:@"%d",i]]; [tableData setPhoneName:[NSString stringWithFormat:@"%@_%d",name,i]]; [tableData setPhoneNumber:[NSString stringWithFormat:@"%lli",[number longLongValue]+i]]; [tableDataArray addObject:tableData]; [tableView noteNumberOfRowsChanged]; [tableData release]; [pool drain]; } } #pragma mark Action methods #pragma mark Table view dataSource methods - (int)numberOfRowsInTableView:(NSTableView *)aTableView { return [tableDataArray count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { if(![tableDataArray count]) { return nil; } NSString *identifier = [aTableColumn identifier]; MqjTableData *td = [tableDataArray objectAtIndex:rowIndex]; return [td valueForKey:identifier]; } - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { NSString *identifier = [aTableColumn identifier]; MqjTableData *td = [tableDataArray objectAtIndex:rowIndex]; [td setValue:anObject forKey:identifier]; } - (void)tableView:(NSTableView *)theTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors { [tableDataArray sortUsingDescriptors:[tableView sortDescriptors]]; [tableView reloadData]; } -(int)getRowCount { return [tableDataArray count]; } - (void) tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if(![tableDataArray count]) { return; } } - (void)tableViewSelectionDidChange:(NSNotification *)aNotification //点击某一行这个函数会自动响应。 { NSAutoreleasePool *pool = [NSAutoreleasePool new]; NSUInteger selectItem =[tableView selectedRow]; if(selectItem == -1) { return ; } MqjTableData *tableData =[tableDataArray objectAtIndex:selectItem]; NSString *showLableString =[NSString stringWithFormat:@"ID:%@ Name:%@ Number:%@",[tableData phoneID],[tableData phoneName],[tableData phoneNumber]]; [staticField setStringValue:showLableString]; [pool drain]; }
点击某一行,获取该行的数据,并在标签上进行显示
[Cocoa]_[初级]_[NSTableView--数据操作和表格操作要注意的问题]
标签:cocoa objective-c 界面 nstableview
原文地址:http://blog.csdn.net/moqj_123/article/details/42270137