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