[Cocoa-4th] Chapter6 - Todo List : Table View (1)

来源:互联网 发布:女友约过炮 知乎 编辑:程序博客网 时间:2024/05/16 15:33

这个例子在:Cocoa-4th 里面的 Chapter6 - Todo List

实现的功能:

1.给列表一些行,并且里面有value

2.可以增加一行

具体需要做的事情是:

STEP 1

打开XCODE编辑器,然后New  Application默认,命名为test_list_one_col

这时候会自动声唱三个文件,代码如下,都是系统生成的,不用动。

EDUAppDelegate.m

#import "EDUAppDelegate.h"@implementation EDUAppDelegate- (void)dealloc{    [super dealloc];}- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{    // Insert code here to initialize your application}@end

EDUAppDelegate.H

#import <Cocoa/Cocoa.h>@interface EDUAppDelegate : NSObject <NSApplicationDelegate>@property (assign) IBOutlet NSWindow *window;@end

一个界面文件xib

STEP2

在MainMenu.xib里面增加一个编辑框(Text Field),一个按钮(NSButton),一个List (Table View)


STEP3

增加一个新类,命名为:tableview_ds_todo 属于:NSObject 子类

STEP4

编写:tableview_ds_todo类

tableview_ds_todo.h里面输入以下代码

////  tableview_ds_todo.h//  test_list_one_col//   //  Created by DMD on 29/5/14.//  Copyright (c) 2014 EDU. All rights reserved.// 本类的作用是;作为TableView的数据源,主要有一下功能// 1.在TableView增加多行数据,初始化里面显示// 2.有增加函数,绑定界面一个按钮,可以将一个编辑框内容增加到列表里面#import <Foundation/Foundation.h>// 新建文件:Objective-C Class// 然后在下面增加协议 <NSTableViewDataSource>@interface tableview_ds_todo : NSObject <NSTableViewDataSource>// 是TableView里面的一列的一个单元项,这个单元项可以有增加操作@property (nonatomic, copy) NSMutableArray *items;// 控件:请将此变量和界面的编辑控件绑定@property (nonatomic, unsafe_unretained) IBOutlet NSTextField *itemInputField;// 控件:请讲Table View 控件和本变量绑定@property (nonatomic, unsafe_unretained) IBOutlet NSTableView *tableView;// 增加按钮事件:将编辑框内容增加到TableView里面- (IBAction)add:(id)sender;// 给TableView增加一些行,可以在初始化里面调用-(void)full_values_in_tableview;@end


tableview_ds_todo.m里面输入以下代码

////  tableview_ds_todo.m//  test_list_one_col////  Created by DMD on 29/5/14.//  Copyright (c) 2014 EDU. All rights reserved.//#import "tableview_ds_todo.h"@implementation tableview_ds_todo//手动增加以下三个变量,这三个变量是H文件里面已经定义好的,如果不在这里说明,后面的函数就没法使用@synthesize items;@synthesize itemInputField;@synthesize tableView;//本函数在新建的时候自动生成- (id)init{    self = [super init];    if (self)    {        //初始化列直        items = [[NSMutableArray alloc] init];        //调用自己的函数,给table一些行        //[self full_values_in_tableview];    }    return self;}// 给TableView增加一些行,可以在初始化里面调用,本函数自定义的,非系统生成-(void)full_values_in_tableview{    NSString *text;    int i=0;    for (i=0; i<6; i++)    {        text =[NSString stringWithFormat:@"First Name is %d",i+1];        [[self items] addObject:text];        [[self tableView] reloadData];        [[self tableView] scrollRowToVisible:[[self items] count] - 1];    }}// 以下都是手动添加,如果不知道函数名称,可以参照协议<NSTableViewDataSource>// 以下一行可有可无,只是另一种方式的注释,方便阅读而已#pragma mark - Actions- (IBAction)add:(id)sender{NSString *text = [[self itemInputField] stringValue];[[self itemInputField] setStringValue:@""];[[self items] addObject:text];[[self tableView] reloadData];[[self tableView] scrollRowToVisible:[[self items] count] - 1];}// 重要说明:以下2个函数是NSTableViewDataSource协议中必须有的,否则TableView连接不成功// 以下一行可有可无,只是另一种方式的注释,方便阅读而已#pragma mark - NSTableViewDataSource// 必须有:作用是得到table的列数,这样下一次增加的时候才可以知道列,否则增加不了- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{return [[self items] count];}//必须有:增加列的单元值- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{NSString *text = [[self items] objectAtIndex:row];return text;}@end


STEP5

增加一个连接器,主要作用是将界面上的控件和类里面的各种变量定义和函数绑定,这样界面上的控件才可以去执行类里面的函数。

连接器和控件是放在一个面板里面,和增加控件方式相识,将连接器Object拖拉到窗口界面左边列(放在Font manager下面)里。[这里很重要]


STEP6

设定连接器的属性:类(Custom Class)为:tableview_ds_todo (这个在下拉列表里面可以选择,也可以输入,会自动出现)


STEP7

设定连接器的各个函数的连接和定义的连接

请选中“连接器”,然后选择属性:Show the connections inspectre (是一个圆的向右边的图标)

然后看到你的定义,将定义的圆点,拉到想要的控件上,就可以了。

例如:

itemInputField

后面的圆点,拉到窗口里面的编辑框上 

tableView

后面的圆点,拉到窗口里面的TableView上

add

后面的圆点,拉到窗口里面的按钮上,这样按钮才会区执行add这函数


STEP8

给Table增加数据源,实际上就是告诉TableView那个类可以操作它。

点窗口界面上TableView控件,然后在属性里面有一个Data Source,点后面的圆点,然后拉到连接器上。就可以了。

表示这个连接器以一个类为数据源。

如果找不到Data source可以点TableView右击,出现一个黑色列表,拉DataSource后面圆点到连接器Table ds todo上。

连接器在窗口控件的左边,是你自己从控件列表中增加的。

注意:选中TableView的时候,是选中一列,不是整个Table表。

如图:


运行编译,OK!

运行效果如下:


完。

成功!

现在还没有删除,和编辑,后续将继续学习TableView。






0 0
原创粉丝点击