Cocoa 编程之表格视图实例
来源:互联网 发布:动漫资讯网站知乎 编辑:程序博客网 时间:2024/06/10 17:27
Cocoa 编程之表格视图
一. 表格视图
1. 所谓表格视图,即以表格的形式显示数据,在表格中不进可以容纳字符串,也可以容纳图片和按钮;
2. 在Mac应用程序中实现表格视图的主要类是NSTableView,此外还需要NSTableColumn类的协调运行;在IOS应用程序中主要使用UITableView;(因为ios应用程序中表格只有一列);两者的继承关系。
NSObjectàUIResponseràUIViewàUIScrollViewàUITableView
NSObjectàNSTableColumn
NSObjectàNSResponseràNSViewàNSControlàNSTableView
3. 表格:横向的称行row,纵向为列column,特定的格子为单元cell;数据的标题部分成为头header;
二. 数据资源
1. NSTableView的关键所在是使用数据资源(Data source)来显示值,
2. 设置NSTableView的数据资源的工作可以在代码中进行,也可以在Interface Builder中进行。
3. 表格的显示并不是一次性显示所有的数据,而是先访问画面能够显示的部分,这样能保证良好的性能;
4. 数据资源如何来提供数据呢?NSTableView对数据资源进行两个查询:一. 表中的行数;二,某行某列的数据;
5. 要让NSTableView能识别数据资源,必须实现上面的两个方法。只要实现了这个方法,任何类的实例都能作为数据资源使用。
- (int)numberOfRowsInTableView:(NSTableView*)tableView;
- (id)tableView:(NSTableView*)tableViewobjectValueForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row;
6. NSTableView类中提供了向表格中读入数据的方法:reloadData;
三. 实例,cocoa实现RSS阅读器:
1. 创建Cocoa Application工程。
2. 创建AppController类,作为控制器;
@interfaceBIDAppController : NSObject
{
NSXMLDocument*document;
IBOutlet idlinkTextField;
IBOutlet idtableView;
IBOutlet idtitleTextField;
IBOutlet idurlTextField;
}
- (IBAction)readURL:(id)sender;
3. 在Interface builder中设置用户界面;
属性设定:
1) URL后的文本框,设置attribute的Action标签为SentOn Enter Only,设置回车键响应
2) 表格是一个复合控件,设置TableColumn的title;第一列设为title,第二列设为link;同时设置Editable未选中,不可编辑;
4. 类实例化和插座动作连接
1) 先把library中的Objects拖到xib文件中,然后设置其类为AppController;
2) 按ctrl建分别拖动AppControllder到文本输入框,Title标签,link标签;和tableView标签;
3) 将Read按钮连接到动作ReadURL,
5. 设置数据源
将tableView按ctrl拖到AppController的dataSource连接;
6. 实现最后的三个方法:
@implementation BIDAppController- (IBAction)readURL:(id)sender{ NSURL* url; url = [NSURL URLWithString:[urlTextField stringValue]]; // document = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL]; if(!document) { return; } //取得/rss/channel/title节点 NSArray *nodes; nodes = [document nodesForXPath:@"/rss/channel/title" error:NULL]; if([nodes count] == 0){ return; } if([nodes count] == 1){ NSXMLNode *titleNode; titleNode = [nodes objectAtIndex:0]; NSString * title; title = [titleNode stringValue]; [titleTextField setStringValue:title]; } nodes = [document nodesForXPath:@"/rss/channel/link" error:NULL]; if([nodes count] == 1){ NSXMLNode *linkNode; linkNode = [nodes objectAtIndex:0]; NSString *link; link = [linkNode stringValue]; [linkTextField setStringValue:link]; } [tableView reloadData];}- (int)numberOfRowsInTableView:(NSTableView*)tableView{ if(!document){ return 0; } NSArray *nodes; nodes = [document nodesForXPath:@"/rss/channel/item" error:0]; if([nodes count] == 0){ return 0; } return [nodes count]; }- (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ if(!document){ return nil; } // id identifier; identifier = [tableColumn identifier]; // NSArray *nodes; nodes = [document nodesForXPath:@"/rss/channel/item" error:NULL]; if(nodes == 0) { return nil; } NSXMLNode* node; node = [nodes objectAtIndex:row]; // if([identifier isEqual:@"title"]){ nodes = [node nodesForXPath:@"title" error:NULL]; if([nodes count] == 1){ node = [nodes objectAtIndex:0]; return [node stringValue]; } }if([identifier isEqual:@"link"]){ nodes = [node nodesForXPath:@"link" error:NULL]; if([nodes count] == 1){ node = [nodes objectAtIndex:0]; return [node stringValue]; }} return nil;}@end
- Cocoa 编程之表格视图实例
- [Cocoa]深入浅出 Cocoa 之 Bonjour 网络编程
- [Cocoa]深入浅出 Cocoa 之 Bonjour 网络编程
- [Cocoa]深入浅出Cocoa之Bonjour网络编程
- [Cocoa]深入浅出Cocoa之Bonjour网络编程
- 视图编程指南之一 Cocoa 视图编程指南简介
- iOS CoCoa编程中视图控制器与视图类
- iOS CoCoa编程中视图控制器与视图类
- Cocoa编程中视图控制器与视图类详解
- CoCoa编程中视图控制器与视图类
- iOS 基础-CoCoa编程中视图控制器与视图类
- Cocoa编程中视图控制器与视图类详解
- Cocoa编程中视图控制器与视图类详解
- Cocoa之Bonjour网络编程
- UItabelView-实例化一个表格视图
- [Cocoa]深入浅出 Cocoa 多线程编程之 block 与 dispatch quene
- [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
- [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
- 常用的正则表达式
- matlab基础学习(4)
- 12/11/17 百度PHP笔试题目整理
- 黑客伦理(Hacker Ethic)
- ASM(Active Shape Model)算法介绍
- Cocoa 编程之表格视图实例
- Linux中的工作队列
- 定时器C++版
- Cloud Foundry samples学习笔记8: Grails Twitter
- oracle分页技术
- 转发和重定向
- C++迭代器 iterator
- Java新手入门标准
- 常用键盘ASCⅡ码,方便查阅!