《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习

时间:2024-12-13 16:08:08

《苹果开发之Cocoa编程》第4版

《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习

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的数据源。

《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习

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

源代码下载:《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习