[Cocoa-4th] Chapter6 - NSTableView 表格操作:增加,删除,编辑

本文详细介绍了如何在Cocoa环境下使用NSTableView进行表格的增、删、改操作。通过创建新工程,定义相关类并实现协议,设置表格数据源,以及添加和编辑控件,实现了对表格内容的动态管理。
摘要由CSDN通过智能技术生成

 [Cocoa-4th] Chapter6 - NSTableView 表格操作:增加,删除,编辑

功能:使用NSTableView 进行表格的增加,删除和编辑

STEP1

新建一个工程

STEP2

增加1个类,里面增加一个协议

代码如下

H

//
//  TableView_DS_1.h
//  test_tableview_1
//
//  Created by DMD on 30/5/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface TableView_DS_1 : NSObject <NSTableViewDataSource>

@property (retain) NSMutableArray *row_items;

@property (assign) IBOutlet NSTextField *m_EDIT_1;
@property (assign) IBOutlet NSTextField *m_EDIT_2;
@property (assign) IBOutlet NSTextField *m_EDIT_3;
@property (assign) IBOutlet NSTextField *m_EDIT_4;


@property (assign) IBOutlet NSTableView *m_TableView1;

-(void)clear_edit;

-(void)init_values;

-(void)full_values_in_tableview;

@end


M

//

//  TableView_DS_1.m

//  test_tableview_1

//

//  Created by DMD on 30/5/14.

//  Copyright (c) 2014 EDU. All rights reserved.

//


#import "TableView_DS_1.h"


#import "TableView_DS_1_RowItems.h"


@implementation TableView_DS_1


@synthesize row_items;

@synthesize m_EDIT_1;

@synthesize m_EDIT_2;

@synthesize m_EDIT_3;

@synthesize m_EDIT_4;

@synthesize m_TableView1;



- (id)init

{

    self = [super init];

    if (self)

    {

        //初始化列直

        row_items = [[NSMutableArray alloc] init];

        

        //init edit control

        //[self init_values]; // It's not work!

        

        //调用自己的函数,给table一些行

        [self full_values_in_tableview];

    }

    return self;

}


- (void)dealloc

{

    [super dealloc];

}



#pragma mark - NSTableViewDataSource +++


#pragma mark * Required Methods (unless bindings are used) *

//must be

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

{

return [row_items count];

}

//must be

- (id)tableView:(NSTableView *)theTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

{

TableView_DS_1_RowItems *row_item = [row_items objectAtIndex:row];

return [row_item valueForKey:[tableColumn identifier]];

}

#pragma mark ***** Optional Methods *****

//Edit Value

-(void)tableView:(NSTableView *)theTableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

{

TableView_DS_1_RowItems *row_item = [row_items objectAtIndex:row];

[row_item setValue:object forKey:[tableColumn identifier]];

}

//for sort

- (void)tableView:(NSTableView *)theTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors

{

[row_items sortUsingDescriptors:[m_TableView1 sortDescriptors]];

[m_TableView1 reloadData];

}

#pragma mark - NSTableViewDataSource ---


-(void)init_values

{

    m_EDIT_1.stringValue=@"m_EDIT_1";

    m_EDIT_2.stringValue=@"m_EDIT_2";

    m_EDIT_3.stringValue=@"m_EDIT_3";

    m_EDIT_4.stringValue=@"m_EDIT_4";

}


// TableView增加一些行,可以在初始化里面调用,本函数自定义的,非系统生成

-(void)full_values_in_tableview

{

    //NSString *text;

    int i=0;

    int count_value=0;

    NSString *text ;

    for (i=0; i<6; i++)

    {

        

        TableView_DS_1_RowItems *newEmployee = [[TableView_DS_1_RowItems alloc] init];

        

        count_value=count_value+2;

        text=[NSString stringWithFormat:@"columne%d",count_value];

        newEmployee.column1 = text;


        count_value=count_value+2;

        text=[NSString stringWithFormat:@"columne%d",count_value];

        newEmployee.column2 = text;


        count_value=count_value+2;

        text=[NSString stringWithFormat:@"columne%d",count_value];

        newEmployee.column3 = text;

        

        count_value=count_value+2;

        text=[NSString stringWithFormat:@"columne%d",count_value];

        newEmployee.column4 = text;


        [row_items addObject:newEmployee];

        [m_TableView1 reloadData];

        [m_TableView1 scrollRowToVisible:[row_items count] - 1];

    }

}


- (IBAction)OnBT_Add:(id)sender

{

    TableView_DS_1_RowItems *new_row_items = [[TableView_DS_1_RowItems alloc] init];

    

    new_row_items.column1 = m_EDIT_1.stringValue;

    new_row_items.column2 = m_EDIT_2.stringValue;

    new_row_items.column3 = m_EDIT_3.stringValue;

    new_row_items.column4 = m_EDIT_4.stringValue;

    

[row_items addObject:new_row_items];

[m_TableView1 reloadData];

    [m_TableView1 scrollRowToVisible:[row_items count] - 1];

    

    [self clear_edit];

    [self init_values];

}


-(void)clear_edit

{

    NSString *value1=@"";

    m_EDIT_1.stringValue=value1;

    m_EDIT_2.stringValue=value1;

    m_EDIT_3.stringValue=value1;

    m_EDIT_4.stringValue=value1;

}


- (IBAction)OnBT_Edit:(id)sender

{

    NSInteger row = [m_TableView1 selectedRow];

if (row == -1)

return;

    TableView_DS_1_RowItems *new_row_items = [row_items objectAtIndex:row];

    

    new_row_items.column1 = m_EDIT_1.stringValue;

    new_row_items.column2 = m_EDIT_2.stringValue;

    new_row_items.column3 = m_EDIT_3.stringValue;

    new_row_items.column4 = m_EDIT_4.stringValue;

    

    //- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

[row_items replaceObjectAtIndex:row withObject:new_row_items];

[m_TableView1 reloadData];

    [m_TableView1 scrollRowToVisible:[row_items count] - 1];

}


- (IBAction)OnBT_Delete:(id)sender

{

    // Which row is selected?

NSIndexSet *rows = [m_TableView1 selectedRowIndexes];

// Is the selection empty?

if ([rows count] == 0)

{

NSBeep();

return;

}

[row_items removeObjectsAtIndexes:rows];

[m_TableView1 reloadData];

}

- (IBAction)OnBT_Refresh:(id)sender

{

    [self init_values];

}

- (IBAction)OnTableView_SelectedRow:(id)sender

{

    NSInteger row = [m_TableView1 selectedRow];

if (row == -1)

return;

    TableView_DS_1_RowItems *row_item = [row_items objectAtIndex:row];

    m_EDIT_1.stringValue = [row_item valueForKey:@"column1"];

    m_EDIT_2.stringValue = [row_item valueForKey:@"column2"];

    m_EDIT_3.stringValue = [row_item valueForKey:@"column3"];

    m_EDIT_4.stringValue = [row_item valueForKey:@"column4"];


}

- (IBAction)OnBT_DeleteAll:(id)sender

{

    [row_items removeAllObjects];

[m_TableView1 reloadData];

}


@end



STEP3

增加一个类,主要是表达:表格有多少列,每列的类型

H

//

//  TableView_DS_1_RowItems.h

//  test_tableview_1

//

//  Created by DMD on 30/5/14.

//  Copyright (c) 2014 EDU. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface TableView_DS_1_RowItems :NSObject


@property (readwrite,copy)NSString *column1;

@property (readwrite,copy)NSString *column2;

@property (readwrite,copy)NSString *column3;

@property (readwrite,copy)NSString *column4;



@end


M

//

//  TableView_DS_1_RowItems.m

//  test_tableview_1

//

//  Created by DMD on 30/5/14.

//  Copyright (c) 2014 EDU. All rights reserved.

//


#import "TableView_DS_1_RowItems.h"


@implementation TableView_DS_1_RowItems


@synthesize column1;

@synthesize column2;

@synthesize column3;

@synthesize column4;



@end


STEP4

在主窗口Main_Menu.xib里面放入1个NSTableView,然后一个增加按钮,一个删除按钮,一个编辑按钮,3个编辑框。

STEP5

在控件面板里面找到Object,拖动到窗口界面左边,这是一个连接器,连接窗口和类。

设定这个连接器的Class是STEP2生成的类。


STEP6

然后将界面的控件分别按住CTRL按键,拉动到STEP2生成的类里面,有的是属性,有的是函数,属性放入H,函数放入m

然后设置NSTableView的DataSource,右击,拉动到连接器上,就可以了。

然后给每一列都要设置Identity,将STEP3生成的类的属性分别放入不同列中。


STEP7

运行编译!OK!


注意:

STEP2生成的类中,一定要写初始化init函数,将NSMutableArray *row_items;初始化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值