読み込んでいます...

为什么Table View有这么多文章系列,因为Table View是最常用的也是最复杂也是最可定制性的一个控件,现在我就来说说如何去写一个更加复杂的Table View,通过这个,你就可以知道如何去使用,绑定和更新Table View了。

前面我们写了几种Table View的操作方式,但是1,2都比较初级,3还是比较中等,从这之后,我会写更高级的开发Table View的方式。这次我会提供源代码下载。ok,我们首先来看看程序的样子。

嗯,看上去有那么点点小复杂,那么我来说说这个程序做什么。这个程序是个很经典的搜索程序,当在右上角搜索的时候,我们就需要使用tableview来显示结果。

了解了程序的功能后,我们首先先在Interface Builder上面做出这个UI来,如何去做我就不多说了。拖动几下。

拖动完成后,我们同样要为整个程序写一个Controller,创建一个Controller文件,并写头文件如下。

@interface Controller : NSObject {

    //搜索框,后面链接用
    IBOutlet NSSearchFieldCell *search_field;
    
//绑定的数据数组
    IBOutlet NSMutableArray *array;
    
//array controller
    IBOutlet NSArrayController *array_controller;
}

@property (nonatomic,retain) NSSearchFieldCell *search_field;
@property (nonatomic,retain) NSMutableArray
*array;
@property (nonatomic,retain) IBOutlet NSArrayController
*array_controller;

//搜索结束后响应的事件
-(IBAction)onSearchEnd:(id)sender;

@end

头文件写完之后,我们写内容。代码如下。

#import "Controller.h"

@implementation Controller

@synthesize search_field;
@synthesize array;
@synthesize array_controller;

//初始化
-(id)init{
    [super init];
    array
= [[NSMutableArray alloc] init];
    
return self;
}

-(IBAction)onSearchEnd:(id)sender{

}

@end

上面就是我们的内容代码了,现在还没写完,因为我们还有一些事情没做。

我们前面绑定Table View的方法都是通过字符或者字典去绑定的(Table View系列1,2),这样很好,当很简单的时候我们可以这么做,但是复杂之后,我们就不能那么做了,如系列3,从这之后,我们都要经常按照类的方式去做。例如我有多少个列,我就封装成一个对象,以便调用,这里我们有key和value两个列,我们可以写类代码如下。

创建一个名字为KeyValuePair的类,并写头文件如下。

#import <Cocoa/Cocoa.h>

//有几个列我们就写几个
@interface KeyValuePair : NSObject {
    NSString
*key;
    NSString
*value;
}

//定义为属性
@property (readwrite, copy) NSString *key;
@property (readwrite, copy) NSString
*value;

//自己写一个实例化方法
-(id)initWithKey:(NSString*)nkey initWithValue:(NSString*)nvalue;

然后写内容代码,内容代码比较好写,因为这个只是为Table View的列去做实例化的。

#import "KeyValuePair.h"

@implementation KeyValuePair

@synthesize key;
@synthesize value;

-(id)init{
    [super init];
    
return self;
}

-(id)initWithKey:(NSString*)nkey initWithValue:(NSString*)nvalue{
    self.key
= nkey;
    self.value
= nvalue;
    
return self;
}

@end

好,我们的代码写完了,但是还有很多事情要做,现在要做的就是链接。我们先从ui开始链接。

拖动一个Object和Array Controll到面板上,更改Object类为Controller。

很老套,但是还是要这么做。然后,就是绑定Array Controller了,下面是重中之重。首先打开Array Controller属性,更改Class,并添加相应的字段(就是类里面的字段。),注意,每个类的字段都要添加上去,以便在后面绑定的时候用到。

更改了Array Controller的属性之后,还需要更改绑定的对象,如下图所示。

这里的意思是,我要绑定到Controller类里面的array变量中,回头看看Controller里面的array变量的申明就知道了。

在绑定好了Array Controller之后,我们的每个列都可以通过Array Controller中得到数据,而不需要去其他地方拿数据,每次我们只需要增删Array Controller就行了。现在我们选中一列,如下图所示。

选中列了之后我们在属性中选择绑定的对象,选择绑定到Array Controller的key对象,如下所示。

之后我们就绑定了列到Array Controller里了。这里的绑定关系为,Array Controller绑定KeyValuePair和Controllers里的变量,然后Table View的列绑定Array Controller。

绑定完成之后,我们就可以写代码添加数据了,代码如下所示。

-(IBAction)onSearchEnd:(id)sender{
    
//初始化一个对象
    KeyValuePair *key_value_pair = [[KeyValuePair alloc] initWithKey:search_field.title initWithValue:search_field.title];
    
//删除所有的array数组对象,因为每次搜索都要清空列表
    [array removeAllObjects];
    
//同理
    [array_controller removeObjects:array];
    
//最后添加一个对象
    [array_controller addObject:key_value_pair];
    
//这里还可以扩展搜索,如果通过查询数据等方式返回多个结果
    
//我们可以用for循环添加到array_controller里
    
//array_controller会自动绑定
}

我们每次只需要更改array_controller里的对象,然后刷新Table View的数据即可。

代码可以从下面下载。

代码下载

527路过 1评论 Mac开发 阅读全文..

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »