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

本文介绍了在Cocoa环境下使用Objective-C进行界面开发时,如何操作和设置NSTableView。主要内容包括在MainMenu.lib文件中创建并配置NSTableView,创建TableViewDelegate文件,设置代理,以及确保数据源与表格列标识的一致性。通过这些步骤,可以实现表格数据的正确显示及点击行获取数据的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];  
}


点击某一行,获取该行的数据,并在标签上进行显示


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值