UITableView的简单使用
有关于UITableView的介绍,在苹果官网上有比较具体的介绍,下面我还是简单复述一下下。表用于显示数据列表,数据列表中的每项都由行表示 ,共主要作用如下:
- 为了让用户能通过分层的数据进行导航
- 为了把项以索引列表的形式展示
- 用于分类不同的项并展示其详细信息
- 为了展示选项的可选列表
UITableView的种类:
- 一种是分组表: 另一种是无格式表 :
UITableView的组成:
表中的每一行都由一个UITableViewCell表示,可以使用一个图像、一些文本、一个可选的辅助图标来配置每个UITableViewCell对象,其模型如下:
UITableViewCell类为每个Cell定义了一些属性:
- textLabel:Cell的主文本标签(一个UILabel对象)
- detailTextLabel:Cell的二级文本标签,当需要添加额外细节时(一个UILabel对象)
- imageView:一个用来装载图片的图片视图(一个UIImageView对象)
UITableView的创建:
1.视图布局:UITableView类继承自UIScrollView类,像其他视图一样,其实例通过窗体定义自己的边界,还可以是 其他视图的子类或父类。UITableViewController负责处理布局,并会使用一个UITableView进行填充。
2.指定数据源:UITableView实例依赖外部资源按需为新表格单元或现有表格单元提供内容,数据源根据索引路径提 供表格单元格,索引路径是NSIndexPath类的对象,描述通过数据树到达特定节点的路径,即它们的分段和它们的行。
myIndexPath=[NSIndexPath indexPathForRow:5 inSection:0];
3.指定委托:UITableView实例使用委托响应用户交互,并实现有意义的响应,委托告知表格将响应这些交互的责任移交给指定对象,委托必须实现UITableViewDelegate协议。
实践:
有了上面的一些基本知识,下面做一个小实验。
效果图:
实现的一些关键代码:
RootViewController是主屏幕控制器,用来展示最上方的示图。示图的每一行分别由不同的类来创建。
其每行创建代码如下:
- (void)createRows
{
[self addSectionAtIndex:0 withAnimation:UITableViewRowAnimationFade];
[self appendRowToSection:0
cellClass:[LabelCell class]
cellData:@"This is row"
withAnimation:
UITableViewRowAnimationLeft];
[self addSectionAtIndex:1 withAnimation:UITableViewRowAnimationFade];
[self appendRowToSection:1
cellClass:[NibLoadedCell class]
cellData:@"This is row"
withAnimation: UITableViewRowAnimationLeft];
[self addSectionAtIndex:2 withAnimation:UITableViewRowAnimationFade];
[self appendRowToSection:2
cellClass:[TextFieldCell class]
cellData:[NSMutableDictionary
dictionaryWithObjectsAndKeys:
@"TextField", @"label", @"", @"value",
NSLocalizedString(@"input value here", @""), @"placeholder", nil]
withAnimation:UITableViewRowAnimationLeft];
[self hideLoadingIndicator];
}
编写UITableViewCell子类的代码:
+ (NSString *)nibName
{
return @"NibCell";
}
- (void)handleSelectionInTableView:(UITableView *)aTableView
{
[super handleSelectionInTableView:aTableView];
NSInteger rowIndex = [self indexPath].row;
[((PageViewController *)aTableView.delegate).navigationController
pushViewController:
[[[DetailViewController alloc] initWithRowIndex:rowIndex] autorelease]
animated:YES];
}
- (void)configureForData:(id)dataObject
tableView:(UITableView *)aTableView
indexPath:(NSIndexPath *)anIndexPath
{
[super configureForData:dataObject tableView:aTableView indexPath:anIndexPath];
label.text = dataObject;
}
以上内容是本人学习ios开发的一个小笔记,代码借鉴Matt Gallagher的作品,根据其作品作详细的学习,并加以修改。谢谢阅读,希望对您有用。
完整代码下载 TableDesign
另:
一、建立 UITableView
DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTable setDelegate:self]; [DataTable setDataSource:self]; [self.view addSubview:DataTable]; [DataTable release]; 二、UITableView各Method说明
//Section总数 - (NSArray *)sectionIndexTitlesForTab
leView:(UITableView *)tableView{ return TitleData; } // Section Titles //每个section显示的标题 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return @""; } //指定有多少个分区(Section),默认为1 - (NSInteger)numberOfSectionsInTableV
iew:(UITableView *)tableView { return 4; } //指定每个分区中有多少行,默认为1 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ }
//绘制Cell -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithI dentifier : SimpleTableIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefa ult reuseIdentifier: SimpleTableIdentifier] autorelease]; } cell.imageView.image = image;//未选cell时的图片 cell.imageView.highlightedImage = highlightImage;//选中cell后的图片 cell.text=//..... return cell; } //行缩进 -(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAt
IndexPath:(NSIndexPath *)indexPath{ NSUInteger row = [indexPath row]; return row; } //改变行的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 40; } //定位 [TopicsTable setContentOffset:CGPointMake(0, promiseNum * 44 + Chapter * 20)];
//返回当前所选cell NSIndexPath *ip = [NSIndexPath indexPathForRow:row inSection:section]; [TopicsTable selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositio
nNone]; [tableView setSeparatorStyle:UITableViewCellSelection
StyleNone]; //选中Cell响应事件 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失 } //判断选中的行(阻止选中第一行) -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath
:(NSIndexPath *)indexPath { NSUInteger row = [indexPath row]; if (row == 0) return nil; return indexPath; } //划动cell是否出现del按钮 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { }
//编辑状态 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingSt
yle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { } [topicsTable setContentSize:CGSizeMake(0,controller.promiseNum * 44)]; //右侧添加一个索引表 - (NSArray *)sectionIndexTitlesForTab
leView:(UITableView *)tableView{ } //返回Section标题内容 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ }
//自定义划动时del按钮内容 - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmati
onButtonForRowAtIndexPat h:(NSIndexPath *)indexPath //跳到指的row or section [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositio
nBottom animated:NO];
三、在UITableViewCell上建立UILable多行显示
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithI dentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; UILabel *Datalabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 44)]; [Datalabel setTag:100]; Datalabel.autoresizingMask = UIViewAutoresizingFlexib leWidth | UIViewAutoresizingFlexib leHeight; [cell.contentView addSubview:Datalabel]; [Datalabel release]; } UILabel *Datalabel = (UILabel *)[cell.contentView viewWithTag:100]; [Datalabel setFont:[UIFont boldSystemFontOfSize:18]]; Datalabel.text = [data.DataArray objectAtIndex:indexPath.row]; cell.accessoryType = UITableViewCellAccessory DisclosureIndicator; return cell; }
//选中cell时的颜色
typedef enum {
UITableViewCellSelection StyleNone, UITableViewCellSelection StyleBlue, UITableViewCellSelection StyleGray } UITableViewCellSelection Style
//cell右边按钮格式
typedef enum {
UITableViewCellAccessory None, // don't show any accessory view
UITableViewCellAccessory DisclosureIndicator, // regular chevron. doesn't track
UITableViewCellAccessory DetailDisclosureButton, // blue button w/ chevron. tracks
UITableViewCellAccessory Checkmark // checkmark. doesn't track
} UITableViewCellAccessoryType
//是否加换行线
typedef enum {
UITableViewCellSeparator StyleNone, UITableViewCellSeparator StyleSingleLine } UITableViewCellSeparator Style
//改变换行线颜色
tableView.separatorColor = [UIColor blueColor];
posted on 2012-03-21 23:53 Hibernate4 阅读(245) 评论(0) 编辑 收藏 举报