UITableView常用知识总结(转)
UITableViewCell *cell = [ [ [ UITableViewCell alloc ]
????????initWithFrame: CGRectZero
????????reuseIdentifier: CellIdentifier?
????] autorelease
];
然后你可以为每一个cell设置不同的风格
(1) 显示文本:?cell.text = @"Frank's Table Cell";
(2) 对齐:?cell.textAlignment = UITextAlignmentLeft;UITextAlignmentLeft 默认是左对齐
???UITextAlignmentRight 右对齐
???UITextAlignmentCenter 中对齐
(3) 字体和尺寸:#import <UIKit/UIFont.h>
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?
{
????self = [ super init ];
????if (self != nil) {
????????self.tableView.rowHeight = 65;?
????}
????return self;?
}
你也可以为每一个cell定义不同的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath?
{
????if ([ indexPath indexAtPosition: 1 ] == 0)
????????return 65.0;?
????else
????????return 40.0;?
}
(6)选中项的风格cell.selectionStyle?= UITableViewCellSelectionStyleBlue;
UITableViewCellSelectionStyleBlue 默认选中项是蓝色
UITableViewCellSelectionStyleGray 灰色
UITableViewCellSelectionStyleNone?没有变化
(7)标签 (labels)
在偏移量100x0处创建一个尺寸50x50?label:
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里
[ cell addSubview: label ];
(8) 附件
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;StyleDescriptionUITableViewCellAccessoryNone没有附件UITableViewCellAccessoryDisclosureIndicator黑色向右的箭头UITableViewCellAccessoryDetailDisclosureButton蓝色附件按钮UITableViewCellAccessoryCheckmark复选框,支持选择
?
7.3 实现多选
- (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 == UITableViewCellAccessoryNone)
????????cell.accessoryType = UITableViewCellAccessoryCheckmark;
????else
????????cell.accessoryType = UITableViewCellAccessoryNone;?
}
7.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:(UITableViewCellEditingStyle) editingStyle
????forRowAtIndexPath:(NSIndexPath *) indexPath?
{
????if (editingStyle == UITableViewCellEditingStyleDelete)?
????{
????????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: UITableViewRowAnimationFade?
????????];
?????}
}
通过传递一个数组给deleteRowsAtIndexPaths方法, 可以删除一行或多行.
?
withRowAnimation至此下列预定义的删除动画
?
AnimationDescriptionUITableViewRowAnimationFadeCell fades outUITableViewRowAnimationRightCell slides out from rightUITableViewRowAnimationLeftCell slides out from leftUITableViewRowAnimationTopCell slides out to top of adjacent cellUITableViewRowAnimationBottomCell slides out to bottom of adjacent cell?
7.5 重新加载表
当你的数据变了的时候,你可以重新加载整个表[ self.tableView reloadData ];
7.6?TableDemo: Simple File Browser
这个例子列表你应用程序home目录里的文件和目录
?
(1) TableDemo main (main.m)#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
????NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
????int retVal = UIApplicationMain(argc, argv, nil, @"TableDemoAppDelegate");
????[pool release];
????return retVal;?
}
(2)TableDemo application delegate
prototypes (TableDemoAppDelegate.h)
?
#import <UIKit/UIKit.h>
@class TableDemoViewController;
@interface TableDemoAppDelegate : NSObject <UIApplicationDelegate>?
{
????UIWindow *window;
????TableDemoViewController *viewController;
????UINavigationController *navigationController;
}
@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)applicationDidFinishLaunching:(UIApplication *)application {
????CGRect screenBounds = [ [ UIScreen mainScreen ] bounds ];
????self.window = [ [ [ UIWindow alloc ] initWithFrame: screenBounds ] autorelease ];
????viewController = [ [ TableDemoViewController alloc ] init ];
????navigationController = [ [ UINavigationController alloc ] init
????????WithRootViewController: viewController
????];
????[ window addSubview: [ navigationController view ] ];
????[ window makeKeyAndVisible ];
}
- (void)dealloc {
????[viewController release];
????[window release];
????[super dealloc];
}
@end
(3) TableDemo view controller
prototype (TableDemoViewController.h)
#import <UIKit/UIKit.h>
@interface TableDemoViewController : UITableViewController {
????NSMutableArray *fileList;
}
- (void) startEditing;
- (void) stopEditing;
- (void) reload;
@end
(TableDemoViewController.m)
#import "TableDemoViewController.h"
@implementation TableDemoViewController?
- (id)init {
????self = [ super init ];
????if (self != nil) {
????????[ self reload ];
????????self.navigationItem.rightBarButtonItem = [ [ [ UIBarButtonItem alloc ]
????????????initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
????????????target: self
????????????action: @selector(startEditing)
????????????] autorelease?
????????];
????????self.navigationItem.leftBarButtonItem = [ [ [ UIBarButtonItem alloc ]
????????????initWithTitle:@"Reload"
????????????style: UIBarButtonItemStylePlain
????????????target: self
????????????action:@selector(reload)?
????????????] autorelease
????????];?
????}
????return self;
}
- (void) stopEditing {
????[ self.tableView setEditing: NO animated: YES ];
????self.navigationItem.rightBarButtonItem
????= [ [ [ UIBarButtonItem alloc ]
???????initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
???????target: self
???????action: @selector(startEditing) ] autorelease ];
}
- (void) reload {
????NSDirectoryEnumerator *dirEnum;
????NSString *file;
????fileList = [ [ NSMutableArray alloc ] init ];
????dirEnum = [ [ NSFileManager defaultManager ] enumeratorAtPath:
????????NSHomeDirectory()
????];
????while ((file = [ dirEnum nextObject ])) {
????????[ fileList addObject: file ];
????}
????[ self.tableView reloadData ];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
????return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsIn
Section:(NSInteger)section {
????return [ fileList count ];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRow
AtIndexPath:(NSIndexPath *)indexPath {
????NSString *CellIdentifier = [ fileList objectAtIndex:
????????[ indexPath indexAtPosition: 1 ]
????];
????UITableViewCell *cell = [ tableView
????????dequeueReusableCellWithIdentifier: CellIdentifier
????];
????if (cell == nil) {
????????cell = [ [ [ UITableViewCell alloc ] initWithFrame:
????????????CGRectZero reuseIdentifier: CellIdentifier ] autorelease
????????];
????????cell.text = CellIdentifier;
????????UIFont *font = [ UIFont fontWithName: @"Courier" size: 12.0 ];
????????cell.font = font;
????}
????return cell;
}
- (void)tableView:(UITableView *)tableView
????commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
????forRowAtIndexPath:(NSIndexPath *) indexPath
{
????if (editingStyle == UITableViewCellEditingStyleDelete) {
????????
????????UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath:
????????????indexPath ];
????????for(int i = 0; i < [ fileList count ]; i++) {
????????????if ([ cell.text isEqualToString: [ fileList objectAtIndex: i ] ]) {
????????????????[ fileList removeObjectAtIndex: i ];
????????????}
????????}
????????
????????NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
????????[ array addObject: indexPath ];
????????[ self.tableView deleteRowsAtIndexPaths: array
????????????withRowAnimation: UITableViewRowAnimationTop
????????];
????}
}
- (void)tableView:(UITableView *)tableView didSelectRowAt
IndexPath:(NSIndexPath *)indexPath {
????UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath: indexPath ];
????UIAlertView *alert = [ [ UIAlertView alloc ] initWithTitle: @"File Selected"
????????message: [ NSString stringWithFormat: @"You selected the file '%@'",
???????????????????????cell.text ]
????????delegate: nil
????????cancelButtonTitle: nil
????????otherButtonTitles: @"OK", nil
????];
????[ alert show ];
}
- (void)loadView {
????[ super loadView ];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterface
Orientation)interfaceOrientation {
????return YES;
}
- (void)didReceiveMemoryWarning {
????[ super didReceiveMemoryWarning ];
}
- (void)dealloc {
????[ fileList release ];
????[ super dealloc ];
}
@end
?
转载自:http://blog.sina.com.cn/s/articlelist_1654117677_0_1.html(这个作者还有很多关于tableview的使用指南,赞一个!!!用到常看看)
UITableViewCellSelectionStyleBlue 默认选中项是蓝色
UITableViewCellSelectionStyleGray 灰色
UITableViewCellSelectionStyleNone?没有变化
(7)标签 (labels)
在偏移量100x0处创建一个尺寸50x50?label:
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里[ cell addSubview: label ];
(8) 附件cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;StyleDescriptionUITableViewCellAccessoryNone没有附件UITableViewCellAccessoryDisclosureIndicator黑色向右的箭头UITableViewCellAccessoryDetailDisclosureButton蓝色附件按钮UITableViewCellAccessoryCheckmark复选框,支持选择
?
7.3 实现多选- (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 == UITableViewCellAccessoryNone)
????????cell.accessoryType = UITableViewCellAccessoryCheckmark;
????else
????????cell.accessoryType = UITableViewCellAccessoryNone;?
}
7.4 编辑和删除
在允许用户删除和编辑的时候,每一个cell左边会显示一个红色删除图标[ self.tableView setEditing:YES animated:YES ];
关闭编辑的时候,table顶部会显示一个Edit导航条
[ self.tableView setEditing:YES animated:YES ];关闭编辑的时候,table顶部会显示一个Edit导航条
[ self.tableView setEditing: NO animated: YES ];
在编辑过程中,如果用户要删除该项,会弹出一个删除确认框. 确认后调UITableViewDataSource类的commitEditingStyle方法来通知你的应用程序, 然后你可以从你的底层数据源里删除该项,并通知table view删除该行.- (void)tableView:(UITableView *)tableView
????commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
????forRowAtIndexPath:(NSIndexPath *) indexPath?
{
????if (editingStyle == UITableViewCellEditingStyleDelete)?
????{
????????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: UITableViewRowAnimationFade?
????????];
?????}
}
通过传递一个数组给deleteRowsAtIndexPaths方法, 可以删除一行或多行.
?
withRowAnimation至此下列预定义的删除动画
?
AnimationDescriptionUITableViewRowAnimationFadeCell fades outUITableViewRowAnimationRightCell slides out from rightUITableViewRowAnimationLeftCell slides out from leftUITableViewRowAnimationTopCell slides out to top of adjacent cellUITableViewRowAnimationBottomCell slides out to bottom of adjacent cell?
7.5 重新加载表当你的数据变了的时候,你可以重新加载整个表[ self.tableView reloadData ];
7.6?TableDemo: Simple File Browser
这个例子列表你应用程序home目录里的文件和目录
?
(1) TableDemo main (main.m)#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
????NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
????int retVal = UIApplicationMain(argc, argv, nil, @"TableDemoAppDelegate");
????[pool release];
????return retVal;?
}
(2)TableDemo application delegate
prototypes (TableDemoAppDelegate.h)
?
#import <UIKit/UIKit.h>
@class TableDemoViewController;
@interface TableDemoAppDelegate : NSObject <UIApplicationDelegate>?
{
????UIWindow *window;
????TableDemoViewController *viewController;
????UINavigationController *navigationController;
}
@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)applicationDidFinishLaunching:(UIApplication *)application {
????CGRect screenBounds = [ [ UIScreen mainScreen ] bounds ];
????self.window = [ [ [ UIWindow alloc ] initWithFrame: screenBounds ] autorelease ];
????viewController = [ [ TableDemoViewController alloc ] init ];
????navigationController = [ [ UINavigationController alloc ] init
????????WithRootViewController: viewController
????];
????[ window addSubview: [ navigationController view ] ];
????[ window makeKeyAndVisible ];
}
- (void)dealloc {
????[viewController release];
????[window release];
????[super dealloc];
}
@end
(3) TableDemo view controller
prototype (TableDemoViewController.h)
#import <UIKit/UIKit.h>
@interface TableDemoViewController : UITableViewController {
????NSMutableArray *fileList;
}
- (void) startEditing;
- (void) stopEditing;
- (void) reload;
@end
(TableDemoViewController.m)
#import "TableDemoViewController.h"
@implementation TableDemoViewController?
- (id)init {
????self = [ super init ];
????if (self != nil) {
????????[ self reload ];
????????self.navigationItem.rightBarButtonItem = [ [ [ UIBarButtonItem alloc ]
????????????initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
????????????target: self
????????????action: @selector(startEditing)
????????????] autorelease?
????????];
????????self.navigationItem.leftBarButtonItem = [ [ [ UIBarButtonItem alloc ]
????????????initWithTitle:@"Reload"
????????????style: UIBarButtonItemStylePlain
????????????target: self
????????????action:@selector(reload)?
????????????] autorelease
????????];?
????}
????return self;
}
- (void) stopEditing {
????[ self.tableView setEditing: NO animated: YES ];
????self.navigationItem.rightBarButtonItem
????= [ [ [ UIBarButtonItem alloc ]
???????initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
???????target: self
???????action: @selector(startEditing) ] autorelease ];
}
- (void) reload {
????NSDirectoryEnumerator *dirEnum;
????NSString *file;
????fileList = [ [ NSMutableArray alloc ] init ];
????dirEnum = [ [ NSFileManager defaultManager ] enumeratorAtPath:
????????NSHomeDirectory()
????];
????while ((file = [ dirEnum nextObject ])) {
????????[ fileList addObject: file ];
????}
????[ self.tableView reloadData ];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
????return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsIn
Section:(NSInteger)section {
????return [ fileList count ];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRow
AtIndexPath:(NSIndexPath *)indexPath {
????NSString *CellIdentifier = [ fileList objectAtIndex:
????????[ indexPath indexAtPosition: 1 ]
????];
????UITableViewCell *cell = [ tableView
????????dequeueReusableCellWithIdentifier: CellIdentifier
????];
????if (cell == nil) {
????????cell = [ [ [ UITableViewCell alloc ] initWithFrame:
????????????CGRectZero reuseIdentifier: CellIdentifier ] autorelease
????????];
????????cell.text = CellIdentifier;
????????UIFont *font = [ UIFont fontWithName: @"Courier" size: 12.0 ];
????????cell.font = font;
????}
????return cell;
}
- (void)tableView:(UITableView *)tableView
????commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
????forRowAtIndexPath:(NSIndexPath *) indexPath
{
????if (editingStyle == UITableViewCellEditingStyleDelete) {
????????
????????UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath:
????????????indexPath ];
????????for(int i = 0; i < [ fileList count ]; i++) {
????????????if ([ cell.text isEqualToString: [ fileList objectAtIndex: i ] ]) {
????????????????[ fileList removeObjectAtIndex: i ];
????????????}
????????}
????????
????????NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
????????[ array addObject: indexPath ];
????????[ self.tableView deleteRowsAtIndexPaths: array
????????????withRowAnimation: UITableViewRowAnimationTop
????????];
????}
}
- (void)tableView:(UITableView *)tableView didSelectRowAt
IndexPath:(NSIndexPath *)indexPath {
????UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath: indexPath ];
????UIAlertView *alert = [ [ UIAlertView alloc ] initWithTitle: @"File Selected"
????????message: [ NSString stringWithFormat: @"You selected the file '%@'",
???????????????????????cell.text ]
????????delegate: nil
????????cancelButtonTitle: nil
????????otherButtonTitles: @"OK", nil
????];
????[ alert show ];
}
- (void)loadView {
????[ super loadView ];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterface
Orientation)interfaceOrientation {
????return YES;
}
- (void)didReceiveMemoryWarning {
????[ super didReceiveMemoryWarning ];
}
- (void)dealloc {
????[ fileList release ];
????[ super dealloc ];
}
@end
?
转载自:http://blog.sina.com.cn/s/articlelist_1654117677_0_1.html(这个作者还有很多关于tableview的使用指南,赞一个!!!用到常看看)