当前位置:编程学习 > wap >>

IOS学习八:UITableView表视图控件初步

表视图这个控件学习的时候,发现是目前我接触到最复杂的组件。
在Android中也提供了类似表视图的控件叫ListView。
原生的ListView,支持的操作其实很有限,数据的条目展示,点击或是长按的操作。
后来慢慢的衍生出来的索引,分区,动态改变指定条目位置等。
到了IOS发现,原来都是这些设计概念全是从IOS的表视图移植过去的吧。
因此,IOS的表视图是个挺丰富的控件

以下文章内容我基本是这么个流程划分
最简单的表视图——》自定义Cell表——》可编辑表——》可动态移动表
以下是配合Navigation导航条控件演示的tableView各种实现。
一:基础表视图
我们看下表视图一个大致的界面模型
首先是navc的顶级视图

这个视图控制器的代码基本很前面提到的导航那章一样,只是多了一个数组容器来保存要显示的三个二级视图控制器
看下m文件
[cpp]
// 
//  NonoFirstLevelViewController.m 
//  NavTest 
// 
//  Created by Nono on 12-4-26. 
//  Copyright (c) 2012年 NonoWithLilith. All rights reserved. 
// 
 
#import "NonoFirstLevelViewController.h" 
#import "NonoSecondLevelViewController.h" 
#import "SimpleTableViewController.h" 
#import "CustomCellViewController.h" 
#import "EditViewController.h" 
@inte易做图ce NonoFirstLevelViewController () 
 
@end 
 
@implementation NonoFirstLevelViewController 
@synthesize controllers = _controllers; 
#pragma 实现头文件中自定义方法; 
- (void)initAllSecondControllers:(NSMutableArray *)array 

    SimpleTableViewController *controller1 = [[SimpleTableViewController alloc] init]; 
    [controller1 setTitle:@"简单表视图"]; 
    [array addObject:controller1]; 
    [controller1 release]; 
     
    CustomCellViewController *controller2 = [[CustomCellViewController alloc] init]; 
     [controller2 setTitle:@"自定义cell视图"]; 
    [array addObject:controller2]; 
    [controller2 release]; 
     
     
    EditViewController *controller3 = [[EditViewController alloc] init]; 
    [controller3 setTitle:@"可编辑视图"]; 
    [array addObject:controller3]; 
    [controller3 release]; 

 
- (id)initWithStyle:(UITableViewStyle)style 

    self = [super initWithStyle:style]; 
    if (self) { 
    } 
    return self; 

 
- (void)viewDidLoad 

    [super viewDidLoad]; 
    self.title = @"表视图Demo"; 
    //实例化一个可变数组 
    NSMutableArray *array = [[NSMutableArray alloc] init ];// 
    self.controllers = array; 
    [array release]; 
    [self initAllSecondControllers:self.controllers]; 

 
- (void)viewDidUnload 

    [super viewDidUnload]; 

 
- (BOOL)shouldAutorotateToInte易做图ceOrientation:(UIInte易做图ceOrientation)inte易做图ceOrientation 

    return (inte易做图ceOrientation == UIInte易做图ceOrientationPortrait); 

 
#pragma mark - Table view data source 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    return [self.controllers count]; 

 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"FirstLevelCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    NSUInteger row = [indexPath row]; 
    NonoSecondLevelViewController *controller = [self.controllers objectAtIndex:row]; 
    cell.textLabel.text = [controller title]; 
    return cell; 

 
#pragma mark - Table view delegate 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    NSUInteger row = [indexPath row]; 
    NonoSecondLevelViewController  *secondVC = [self.controllers objectAtIndex:row]; 
     [self.navigationController pushViewController:secondVC animated:YES]; 
      

 
@end 
顶视图类基本就是一个导航作用。
线面我么先看最简单的这条目
简单表视图:

[cpp]
- (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]; 
       
    } 
    NSUInteger row = [indexPath row]; 
    NSString *string = [self.data objectAtIndex:row]; 
    cell.textLabel.text = string; 
     
    //这个可以定义item右端小图标显示风格,默认是none; 
    //cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
    [string release]; 
    return cell; 

这边主要说如下几点:
1》。控件得复用,这个和Android很像,因此我们在获取cell对象时,先从原来得复用队列里查找(更具指定的标记,这点也告诉我们,我们可以设置多个标记),
若没有,那就新建一个
2》。整个tableview的style分两种,一种就是顶级视图界面的那种: self.tableView.style = UITableViewStylePlain,另一种就是这个视图的风格:
self.tableView.style = UITableViewStyleGrouped
3》.对于每个item,单元格样式使用了3个不同的单元格元素。依次左边开始有个图标,中间就是一个label,右侧会有一个详情栏。
4》。同样的对于每个cell也是有样式风格的 cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]
针对3,4设置后得某种效果如下:

左端可以自己敬爱个图标进去,黑体字就是文本label,灰色的是详细文本标签,小箭头图标是accessoryType
以下就是代码
[cpp] 
static NSString *CellIdentifier = @"FirstLevelCell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];&nb

补充:移动开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,