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

NSTableView 表格操作:增加,删除,编辑(方法2)

时间:2014-09-26 21:17:28      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:des   style   color   io   os   使用   ar   for   文件   

NSTableView 表格操作:增加,删除,编辑(方法2)

在:

NSWindowController

新建表单

(H,M,XIB三个文件+新建一个类放CellData)

1.不使用delegate

2.数据源直接是当前文件File‘s Owner

3.H继承NSTableView协议,将需要的几个函数放入

4.增加一个列表数据单元类

这个方法的特点是:

当新建立一个窗体,显示一个表格内容,不使用Deleget就少了一个类的2个文件,让程序简单化

操作步骤:

STEP1 将NSTableView的DataSource拉向File‘s Owner(这一步相当于之前用另外一个类和Deleget作为表格的数据源)

STEP2 将这个控件在H里面申明

STEP3 在XIB对应的H里面增加这个控件的协议

STEP4 在M文件里面,需要将协议必备的几个函数写入,并且修改对应的代码

注意:数据源和定义申明的时候,选择表格(不包括标题),选择2次就可以选中

注意:每个列:ID值是数据单元中申明的变量,需要复制,不能手动选择

本人测试成功!

以下是源代码

表格对应的数据单元

H文件

@interface List_Column : NSObject

{

    NSString *col_no;

}

@property (readwrite,copy) NSString *col_no;

@end


M文件

#import "List_Column.h"

@implementation List_Column

@synthesize  col_no;

@end


XIB对应的类,这个类用来作为表格的DataSource

H文件

#import <Cocoa/Cocoa.h>

#import "List_Column.h"


@interface List : NSWindowController <NSTableViewDataSource>

{

    NSMutableArray *m_table_rows;

    IBOutlet NSTableView *m_table_list;

    NSThread *m_thread_load_list;

}


@end


M文件

#import “List.h"


@interface List ()


@end


static bool g_can_click_load = true;

@implementation List

- (id)init

{

    if (![super initWithWindowNibName:@"List"])

    {

        return nil;

    }

    m_table_rows = [[NSMutableArray alloc] init];

    [self Load];

    return self;

}

// Show Top 1 ++

- (IBAction)showWindow:(id)sender

{

    [[NSApplication sharedApplication] runModalForWindow:self.window];

}


-(void)closeModalWindow:(id)sender

{

    [[NSApplication sharedApplication] stopModal];

}


- (void)windowWillClose:(NSNotification *)notification

{

    [self performSelectorOnMainThread:@selector(closeModalWindow:) withObject:nil waitUntilDone:NO];

}


// Show Top 1 --


//---

- (id)initWithWindow:(NSWindow *)window

{

    self = [super initWithWindow:window];

    if (self)

    {

        // Initialization code here.

    }

    return self;

}


- (void)windowDidLoad

{

    [super windowDidLoad];

}


-(void)Load

{

    if (true == g_can_click_load)

    {

        g_can_click_load = false;

    }

    else

    {

        return ;

    }

    [self thread_do_load];

}


-(void)thread_do_load

{

    //线程:不需要申明变量

    //[self performSelectorOnMainThread:@selector(thread_function_main) withObject:self waitUntilDone:YES];

    

    //线程,需要申明

    m_thread_load_list = [[NSThread alloc] initWithTarget:self selector:@selector(thread_do_load_function) object:nil];

    

    //线程开始

    [m_thread_load_list start];

}


-(void)thread_do_load_function

{

    [m_table_rows removeAllObjects];

    [m_table reloadData];

    [self TableView_FullData];

    g_can_click_load = true;

    [m_thread_load_list cancel];

    m_thread_load_list = nil;    

}


-(void)TableView_FullData

{

    int count = (int)contact_groups.size();

    for (int i=0; i<count; i++)

    {

        text=[NSString stringWithFormat:@"%d",i+1];

        

        List_Column *newRecord = [[List_Column alloc] init];

        

        newRecord.col_no = text;

        

        [m_table_rows addObject:newRecord];

        [m_table reloadData];

        [m_table scrollRowToVisible:[m_table_rows count] - 1];

       

    }

}


// 表格 +++

// 以下是对控件NSTableView控件的支持函数

#pragma mark -

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

//[TableView Must Be]+++++


- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

{

    NSInteger index_value=[m_table_rows count];

    return index_value;

}


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

{

    List_Column *rows =[m_table_rows objectAtIndex:row];

    return [rows valueForKey:[tableColumn identifier]];

}

//[TableView Must Be]----


#pragma mark -

#pragma mark ***** Optional Methods ***** [++++]

// NOTE: This method is not called for the View Based TableView.


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

{

    List_Column *rows = [m_table_rows objectAtIndex:row];

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

}


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

{

    [m_table_rows sortUsingDescriptors:[tableView sortDescriptors]];

    [tableView reloadData];

}

#pragma mark ***** Optional Methods ***** [----]



@end



test OK!

2014-9-26 BY DMD 总结(此方法比之前的方法又简单了一大步)!

NSTableView 表格操作:增加,删除,编辑(方法2)

标签:des   style   color   io   os   使用   ar   for   文件   

原文地址:http://blog.csdn.net/u013317006/article/details/39579831

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