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

来源:互联网 发布:艾美仕怎么样 知乎 编辑:程序博客网 时间:2024/05/23 18:54

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


staticbool g_can_click_load = true;

@implementation List

- (id)init

{

    if (![superinitWithWindowNibName:@"List"])

    {

        return nil;

    }

   m_table_rows = [[NSMutableArrayalloc] init];

    [selfLoad];

    return self;

}

// Show Top 1 ++

- (IBAction)showWindow:(id)sender

{

    [[NSApplicationsharedApplication] runModalForWindow:self.window];

}


-(void)closeModalWindow:(id)sender

{

    [[NSApplicationsharedApplication] stopModal];

}


- (void)windowWillClose:(NSNotification *)notification

{

    [selfperformSelectorOnMainThread:@selector(closeModalWindow:)withObject:nilwaitUntilDone:NO];

}


// Show Top 1 --


//---

- (id)initWithWindow:(NSWindow *)window

{

   self = [superinitWithWindow:window];

   if (self)

    {

        // Initialization code here.

    }

    return self;

}


- (void)windowDidLoad

{

    [superwindowDidLoad];

}


-(void)Load

{

    if (true ==g_can_click_load)

    {

        g_can_click_load =false;

    }

   else

    {

       return ;

    }

    [selfthread_do_load];

}


-(void)thread_do_load

{

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

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

    

    //线程,需要申明

   m_thread_load_list = [[NSThreadalloc] initWithTarget:selfselector:@selector(thread_do_load_function)object:nil];

    

    //线程开始

    [m_thread_load_liststart];

}


-(void)thread_do_load_function

{

    [m_table_rowsremoveAllObjects];

    [m_table reloadData];

    [selfTableView_FullData];

    g_can_click_load =true;

    [m_thread_load_listcancel];

    m_thread_load_list =nil;    

}


-(void)TableView_FullData

{

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

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

    {

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

        

        List_Column *newRecord = [[List_Columnalloc] init];

        

        newRecord.col_no = text;

        

        [m_table_rowsaddObject:newRecord];

        [m_table reloadData];

        [m_tablescrollRowToVisible:[m_table_rowscount] - 1];

       

    }

}


// 表格 +++

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

#pragma mark -

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

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


- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

{

   NSInteger index_value=[m_table_rowscount];

   return index_value;

}


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

{

    List_Column *rows =[m_table_rowsobjectAtIndex:row];

   return [rows valueForKey:[tableColumnidentifier]];

}

//[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_rowsobjectAtIndex:row];

    [rowssetValue:object forKey:[tableColumnidentifier]];

}


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

{

    [m_table_rowssortUsingDescriptors:[tableView sortDescriptors]];

    [tableViewreloadData];

}

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



@end



test OK!

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

0 0
原创粉丝点击