《苹果开发之Cocoa编程》第4版
P87 创建一个to-do list应用程序,在文本框中输入任务。当用户单击Add按钮时,添加字符串到一个变长队列,新任务就出现在list的末尾。
关键点:
1.NSString 类型的变量去除首尾空格方法:[nsstringItem stringByTrimmingCharactersInSet: [NSCharacterSetwhitespaceAndNewlineCharacterSet]]
2.TableView控件重新加载数据的方法:[_tableView reloadData]
3.TableView添加数据源需要实现的两个方法:
(1)-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv; 在此方法中返回数据源中数据的数量。
(2)-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; 在此方法中返回row行 tableColumn列的数据内容。
4.TableView如果是可编辑的表格,并使用基于单元格的表格视图,需要实现的方法:
-(void)tableView:(NSTableView *)tv setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
在此方法中更新数据源的数据,然后tableView重新加载数据(reloadData)。
5.两个outlet(文本框、数据列表)和一个action都是通过Assistant editor 面板添加(方便快捷)。
6.在头文件中声明一个变长数组用于存储数据,并做为tableView的数据源。
ToDoLisDemoAppDelegate.h源代码
// // ToDoLisDemoAppDelegate.h // ToDoLisDemo // // Created by apple on 13-7-11. // Copyright (c) 2013年 FDStudio. All rights reserved. // #import <Cocoa/Cocoa.h> @interface ToDoLisDemoAppDelegate : NSObject <NSApplicationDelegate>{ NSMutableArray *_array; } @property (assign) IBOutlet NSWindow *window; @property (weak) IBOutlet NSTextField *textField; //添加的文本框outlet @property (weak) IBOutlet NSTableView *tableView; //添加的tableView表格outlet - (IBAction)addToDataSource:(id)sender; @end
ToDoLisDemoAppDelegate.m 源代码
// // ToDoLisDemoAppDelegate.m // ToDoLisDemo // // Created by apple on 13-7-11. // Copyright (c) 2013年 FDStudio. All rights reserved. // #import "ToDoLisDemoAppDelegate.h" @implementation ToDoLisDemoAppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application } -(id)init{ self = [super init]; if(self){ //初始化变长数组 _array = [[NSMutableArray alloc] init]; } return self; } -(NSInteger)numberOfRowsInTableView:(NSTableView *)tv{ return (NSInteger)[_array count]; } -(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ NSString *v = [_array objectAtIndex:row]; return v; } -(IBAction)addToDataSource:(id)sender { //获取文本框内容 NSString *item = [_textField stringValue]; //去掉字符串首尾的空格 item = [item stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; ){ [_array addObject: item]; //将字符串添加到变长数组中 [_tableView reloadData]; //tableView重新加载数据 [_textField setStringValue: @""]; //清空文本框的内容 } } //编辑tableView需要实现的方法 -(void)tableView:(NSTableView *)tv setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ [_array replaceObjectAtIndex: row withObject:object]; //修改变长数组中的内容 [_tableView reloadData]; //tableView重新加载数据 } @end
源代码下载: