1 创建表
(1) 创建一个UITableViewController的子类
@interface MyTableViewController : UITableViewController {
}
-(id)init;
-(void)dealloc;
添加数据源, 由三个函数来回答数据绑定的请求:
numberOfSectionsInTableV用numberOfSectionsInTableV
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
用numberOfRowsInSection方法来返回每个组里有几行
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return nRecords;
}最后用 cellForRowAtIndexPath来得到一个包含每一行显示信息的 UITableViewCell对象. U ITableViewCell类支持文本和图像,编辑和删除确认等功能. 这些信息会保存在表队列里,用来至此翻页等功能,但是内存很低的时候会自动释放,然后再需要的时候重新创建.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [ [ NSString alloc ] initWithFormat:
@"Cell %d", [ indexPath indexAtPosition: 1 ] ];
UITableViewCell *cell = [ tableView dequeueReusableCellWithI dentifier: CellIdentifier ];
if (cell == nil) {
cell = [ [ [ UITableViewCell alloc ]
initWithFrame: CGRectZero reuseIdentifier: CellIdentifier ]
autorelease
];
}
cell.text = CellIdentifier;
return cell;
}NSIndexPath用来保存哪一组的哪一行.
[ indexPath indexAtPosition: 0 ]哪一组
[ indexPath indexAtPosition: 1 ]哪一行
2 UITableViewCell包含图像,文本等.
NSString *CellIdentifier = [ [ NSString alloc ] initWithString: @"Frank" ];
UITableViewCell *cell = [ [ [ UITableViewCell alloc ]
];
然后你可以为每一个cell设置不同的风格
(1) 显示文本:
UITextAlignmentLeft 默认是左对齐
-
UITextAlignmentRight 右对齐 -
UITextAlignmentCenter 中对齐
(3) 字体和尺寸:
UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 18.0 ];
cell.font = myFont;
//系统字体
UIFont *mySystemFont = [ UIFont systemFontOfSize: 12.0 ];
UIFont *myBoldSystemFont = [ UIFont boldSystemFontOfSize: 12.0 ];
UIFont *myItalicSystemFont = [ UIFont italicSystemFontOfSize: 12.0 ];
(4) 颜色
#import <UIKit/UIColor.h>
//文本颜色cell.textColor = [ UIColor redColor ];
//当前选择项的颜色cell.selectedTextColor = [ UIColor blueColor ];
(5) 图像
//从你应用程序目录下的文件创建一个image
cell.image = [ UIImage imageNamed: @"cell.png" ];//当前选中项的图形
cell.selectedImage = [ UIImage imageNamed: @"selected_cell.png" ];
可以修改table保准行高来适应你的图形高度- (id)init
{
}
你也可以为每一个cell定义不同的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelection StyleBlue;
UITableViewCellSelection
UITableViewCellSelection
UITableViewCellSelection
(7)标签 (labels)
在偏移量100x0处创建一个尺寸50x50
UILabel *label = [ [ UILabel alloc ] initWithFrame: CGRectMake(100.0, 0.0, 50.0, 50.0) ];
label.text = @"Label Text";
label.textAlignment = UITextAlignmentLeft;
label.textColor = [ UIColor redColor ];
label.font = [ UIFont fontWithName: @"Arial" size: 10.0 ];
标签label可以设置文本阴影,甚至可以定义阴影的偏移:
label.shadowColor = [ UIColor grayColor ];
label.shadowOffset = CGSizeMake(0, -1);
高亮是的颜色:
label.highlightedTextColor = [ UIColor blackColor ];标签的背景色:
label.backgroundColor = [ UIColor blueColor ];
把标签加到cell里(8) 附件
cell.accessoryType = UITableViewCellAccessory DisclosureIndicator;
Style | Description |
---|---|
UITableViewCellAccessory | 没有附件 |
UITableViewCellAccessory | 黑色向右的箭头 |
UITableViewCellAccessory | 蓝色附件按钮 |
UITableViewCellAccessory | 复选框,支持选择 |
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Selected section %d, cell %d",
[ indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition: 1 ]);
//获的当前选择项
UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath: indexPath ];
//显示复选框
if (cell.accessoryType == UITableViewCellAccessory None)
cell.accessoryType = UITableViewCellAccessory Checkmark;
else
cell.accessoryType = UITableViewCellAccessory None;
} 4 编辑和删除
在允许用户删除和编辑的时候,每一个cell左边会显示一个红色删除图标
[ self.tableView setEditing:YES animated:YES ];关闭编辑的时候,table顶部会显示一个Edit导航条
[ self.tableView setEditing: NO animated: YES ];
在编辑过程中,如果用户要删除该项,会弹出一个删除确认框. 确认后调 UITableViewDataSource类的 commitEditingStyle方法来通知你的应用程序, 然后你可以从你的底层数据源里删除该项,并通知table view删除该行.- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingSt yle) editingStyle
forRowAtIndexPath:(NSIndexPath *) indexPath
{
if (editingStyle == UITableViewCellEditingSt yleDelete)
{
NSLog(@"Deleted section %d, cell %d", [ indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition: 1 ]);
NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
[ array addObject: indexPath ];
[ self.tableView deleteRowsAtIndexPaths: array
withRowAnimation: UITableViewRowAnimationF ade
];
}
}
通过传递一个数组给deleteRowsAtIndexPaths方法, 可以删除一行或多行.
withRowAnimation至此下列预定义的删除动画
当你的数据变了的时候,你可以重新加载整个表
[ self.tableView reloadData ];
6TableDemo: Simple File Browser
这个例子列表你应用程序home目录里的文件和目录
(1) TableDemo main (main.m)
#import <UIKit/UIKit.h> int main(int argc, char *argv[]) {
} |
(2)TableDemo application delegate
prototypes (TableDemoAppDelegate.h)
#import <UIKit/UIKit.h> @class TableDemoViewController; @interface TableDemoAppDelegate : NSObject <UIApplicationDelegate> {
} @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet TableDemoViewController *viewController; @end |
(TableDemoAppDelegate.m)
#import "TableDemoAppDelegate.h" #import "TableDemoViewController.h" @implementation TableDemoAppDelegate @synthesize window; @synthesize viewController; - (void)applicationDidFinishLaun
} - (void)dealloc {
} @end |
(3) TableDemo view controller
prototype (TableDemoViewController.h)
#import <UIKit/UIKit.h> @interface TableDemoViewController : UITableViewController {
} - (void) startEditing; - (void) stopEditing; - (void) reload; @end |
(TableDemoViewController.m)
#import "TableDemoViewController.h" @implementation TableDemoViewController - (id)init {
} - (void) stopEditing { } - (void) reload { } - (NSInteger)numberOfSectionsInTableV } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsIn Section:(NSInteger)section { } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRow AtIndexPath:(NSIndexPath *)indexPath { } - (void)tableView:(UITableView *)tableView { } - (void)tableView:(UITableView *)tableView didSelectRowAt IndexPath:(NSIndexPath *)indexPath { } - (void)loadView { } - (BOOL)shouldAutorotateToInterf Orientation)interfaceOrientation { } - (void)didReceiveMemoryWarning { } - (void)dealloc { } @end |