IOS 开发学习30 UITableView的使用总结

来源:互联网 发布:淘宝网磁力片玩具 编辑:程序博客网 时间:2024/05/14 22:45

一个简单的示例

#import <UIKit/UIKit.h>@interface ViewController : UITableViewController<UITableViewDataSource,UITableViewDelegate>@property (nonatomic, retain) NSArray *dataList;@property (nonatomic, retain) UITableView *myTableView;@end
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    NSArray *list = [NSArray arrayWithObjects:@"选项1",@"选项2", nil];    self.dataList = list;    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];    tableView.dataSource = self;    tableView.delegate = self;    tableView.scrollEnabled=false;    tableView.separatorColor=UITableViewCellSelectionStyleNone;    self.myTableView = tableView;    [self.view addSubview:self.myTableView];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 2;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    static NSString *CellWithIdentifier = @"Cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier];    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellWithIdentifier];    }    NSUInteger row = [indexPath row];    cell.textLabel.text = [self.dataList objectAtIndex:row];    cell.detailTextLabel.text = @"详细信息";    return cell;}@end

UITableView常用设置

两种样式

[[UITableView alloc] initWithFrame:view.bounds style:UITableViewStylePlain];  [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStyleGrouped]; 

其它设置

风格

//高度默认44px_tableView.rowHeight = 70;    //背景UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_0410"]];  _tableView.backgroundView = backgroundView;  //背景颜色_tableView.backgroundColor = [UIColor yellowColor];//分隔线颜色_tableView.separatorColor = [UIColor purpleColor];//分割线风格_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

头部 header

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];  headerView.backgroundColor = [UIColor redColor];  // 添加子视图  UILabel *headText = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, 200, 80)];  headText.text = @"自定义文本!";  headText.numberOfLines = 0;  [headerView addSubview:headText];  _tableView.tableHeaderView = headerView; //设置头部  // 设置表视图的尾部视图(footerView 添加子视图)      UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];  footerView.backgroundColor = [UIColor yellowColor];  _tableView.tableFooterView = footerView;  //设置尾部  

UITableView的方法

-(void)reloadData;刷新//指定一个cell,返回一个NSIndexPath,如果cell没有,返回nil  - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;   //指定一个范围,返回一组NSIndexPath,如果rect无效,返回nil  - (NSArray *)indexPathsForRowsInRect:(CGRect)rect;   //指定一个NSIndexPath,返回一个cell  - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;   //返回所有显示的cell  - (NSArray *)visibleCells;  //返回所有显示的cell的NSIndexPath  - (NSArray *)indexPathsForVisibleRows; //插入一个cell到指定的indexPaths位置,指定一个动画效果  - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;  //删除indexPaths位置的cell,指定一个动画效果  - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;  //刷新indexPaths位置的cell,指定一个动画效果(tableView的局部刷新,一般用于cell的位置不改变,又不想刷新整个tableView时)  - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);  //移动indexPaths位置的cell,指定一个动画效果  - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath NS_AVAILABLE_IOS(5_0);  

重写的方法

//UITableView有多少个组  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{      return 1;//默认为1  }  //UITableView每组有多少条数据  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;  {      return [_listArray count];  }   //创建一个cell  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {      static NSString *cellIdentifier = @"cell";      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];      if (cell == nil) {          cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];      //cell有四种样式      //UITableViewCellStyleDefault,       只显示图片和标题      //UITableViewCellStyleValue1,        显示图片,标题和子标题(子标题在右边)      //UITableViewCellStyleValue2,        标题和子标题      //UITableViewCellStyleSubtitle       显示图片,标题和子标题(子标题在下边)      }      // 指向其中一行      // cell.textLabel.text = [self.listArray objectAtIndex:indexPath.row];//设置cell的标题      cell.textLabel.textColor = [UIColor redColor];//设置标题字体颜色      cell.textLabel.font = [UIFont fontWithName:fontName size:18];//设置标题字体大小      cell.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];//设置cell的图片      cell.detailTextLabel = @"detailTextLabel"// 设置cell的子标题      return cell;  }   //设置组头部的文字  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;   //设置组尾部的文字  - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section; //指定cell是否可编辑   - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;  //指定cell是否可移动   - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;  //提交编辑操作,重写此方法,自动实现cell左滑动删除功能   - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;  // 移动cell   - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath; //右边索引显示的内容   - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView  {      return _keyArray;  }   // 点击右边索引跳转到哪个index位置   - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index  {      return index;  }   

代理方法

//cell的行高   - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;  //组头部的高度   - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;  //组尾部的高度   - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;  //自定义组头部视图,此方法和数据源中设置头部标题的方法只能实现一个   - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height  //自定义组尾部视图,此方法和数据源中设置尾部标题的方法只能实现一个   - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;    //点击cell时调用   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;  //取消点击cell时调用   - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0); 

固定header的方法(未测试)

  • 方法1 ,重写contentOffset:
 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {    CGFloat sectionHeaderHeight = 40;    if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {        scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);    } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {        scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);    } }
  • 方法2,又分两种
    //第一种 自己创建的UITableView
//使用UITableViewStylePlain样式创建表格,这不妨碍你使用头部视图UITableView *table = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];

//另一种 继承UITableViewController

- (id)initWithStyle:(UITableViewStyle)style{    self = [super initWithStyle:style];    if (self) {       style = UITableViewStylePlain;    }    return self;}

UITableViewCell

//cell选中的样式cell.selectionStyle = UITableViewCellSelectionStyleBlue;  //选中后取消[tableView deselectRowAtIndexPath:indexPath animated:YES];或  [self performSelector:@selector(deselectRowAtIndexPath:animated:) withObject:indexPath afterDelay:.5];  //cell右边出现选中的箭头cell.accessoryType = UITableViewCellAccessoryCheckmark; //cell自适合高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {      // wrong  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];      NSString *text = [_listArray objectAtIndex:indexPath.row];      //320为文字显示的宽度,高度1000是随便写的,会自动根据文字的大小和宽度计算出高度      CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(320, 1000)];      // +20是为了让每个cell之间有些间隔      return size.height+20;  }  //TableViewCell的分割线fix IOS7.0+UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];  [tableViewsetSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];  
0 0
原创粉丝点击