为什么Table View有这么多文章系列,因为Table View是最常用的也是最复杂也是最可定制性的一个控件,现在我就来说说如何去写一个更加复杂的Table View,通过这个,你就可以知道如何去使用,绑定和更新Table View了。
前面我们写了几种Table View的操作方式,但是1,2都比较初级,3还是比较中等,从这之后,我会写更高级的开发Table View的方式。这次我会提供源代码下载。ok,我们首先来看看程序的样子。

嗯,看上去有那么点点小复杂,那么我来说说这个程序做什么。这个程序是个很经典的搜索程序,当在右上角搜索的时候,我们就需要使用tableview来显示结果。
了解了程序的功能后,我们首先先在Interface Builder上面做出这个UI来,如何去做我就不多说了。拖动几下。
拖动完成后,我们同样要为整个程序写一个Controller,创建一个Controller文件,并写头文件如下。
//搜索框,后面链接用
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
头文件写完之后,我们写内容。代码如下。
@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的类,并写头文件如下。
@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的列去做实例化的。
@implementation KeyValuePair
@synthesize key;
@synthesize value;
[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。
绑定完成之后,我们就可以写代码添加数据了,代码如下所示。
//初始化一个对象
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的数据即可。
代码可以从下面下载。
[...] Mac开发 – Table View(4) [...]