码迷,mamicode.com
首页 > 其他好文 > 详细

[Cocoa]_[初级]_[NSTableView--数据操作和表格操作要注意的问题]

时间:2014-12-30 20:46:35      阅读:172      评论:0      收藏:0      [点我收藏+]

标签: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

MqjTableData.m

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!