IOS基础学习日志(五)简单的表格及表视图

                                                         IOS基础学习日志(五)

    今天我们主要学习了IOS相关的一些简单的表格及表视图相关属性、定义和声明,如下便是我们今天所学内容。

本章要点:

1、表视图简介

2、实现一个简单的表

3、分组表和索引

4、其他控件

 

1、表格视图简介:

-表格视图是用于向用户显示数据列表的一种最常见的机制,数据列表中的每项都用行表示。

-表格视图是显示表数据的视图对象,它是UITableView类的一个实例。表中的每个可见行都由UITableViewCell类实现。

-表视图并不负责存储表中的数据,它们只存储足够绘制当前可见行的数据。

-表格视图从遵循UITableViewDelegate协议的对象获取配置数据,从遵循UITableViewDataSource协议的对象获取行数据。

 2、分组表与无格式表

-分组表中的每个组都由嵌入在圆角矩形中的多个行组成。注意,一个分组表可以只包含一个组。

-无格式表是默认的样式,任何没有圆角矩形属性的表都是无格式表视图。

-一个带有索引的无格式表,表中的每个部分被称为数据源中的分区(section)。在索引表中每个分区对应一个索引条目。

设计视图

-在xib文件中设计表格视图。在IB中调出控件库,找到Table View,并将它拖到View窗口即可。

-将表视图拖到View窗口上之后,通过单击操作来选定它,然后打开连接检查器,可以看到表视图的前两个可以连接是数据源和委托。从每个连接旁边的圆圈拖到File’s Owner图标。

编写控制器

-可以通过两种方法创建表格视图

继承UIViewController,并且实现UITableViewDelegate和UITableViewDataSource协议

继承UITableViewController

用数组存储表格的数据

#import<UIKit/UIKit.h>

@interface SimpleTableViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>

//用于存储表格的数据

@property (nonatomic, retain) NSArray *listData;

@end

要实现协议中的方法

-UITableViewDataSource协议中的方法:

//必须实现的方法:

//该方法的作用分区中共有多少行

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section:

//该方法的作用是创建每一行UITableViewCell

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

//选择实现的方法

//该方法的功能是设置该表格有几个分区

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

要实现协议中的方法

-UITableViewDelegate协议中的主要方法:

//选择实现的方法:

//当表格单元被选中时调用的方法

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

//设置分组组名的显示信息

(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

要实现协议中的方法

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

应该注意的一些问题

//当表格单元被选中时调用的方法

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

{

static NSString *SimpleTableIdentifier = @“SimpleTableIdentifier”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil)

{

//实现每一行的偏移

cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier]autorelease];

}

//row行数只能大于零,根据索引获取当前行数

NSUInteger row = [indexPath row];

//首先找到你当前行的标签的内容,然后改一下,根据数组里面的对应的行数取下标,能够保证每次取得不是同一个数据

cell.textLabel.text = [listData objectAtIndex:row];

return cell;

}

要获取正确的值,需要知道表视图需要显示哪些行。我们使用表的行数从数组获取相应的字符串,将它分配给单元的textLabel.text属性,获取行号代码如下:

//indexPath为函数的参数,row用来存放行号

NSUInteger row = [indexPath row];

//从数组中通过行号得到信息

cell.textLabel.text = [listData objectAtIndex:row];

为表格添加图像

在tableView:cellForRowAtIndexPath:方法中添加以下代码:

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

{

static NSString *SimpleTableIdentifier = @“SimpleTableIdentifier”;

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil)

{

cell = [[[UITableViewCell alloc]initWithFrame:CGRrctZero reuseIdentifier:SimpleTableIdentifier]autorelease];

}

UIImage *image = [UIImage imageNamed:@“test.png”];

cell.imageView.image = image;

NSUInteger row = [indexPath row];

cell.textLabel.text = [listData objectAtIndex:row];

return cell;

}

点击表格更换图像

在tableView:cellForRowAtIndexPath:方法中添加以下代码:

//点击表格更换图像

UIImage *image = [UIImage imageNamed:@“test.png”];

UIImage *image2 = [UIImage imageNamed:@“test.png”];

//正常显示的表格图片

cell.imageView.image = image;

//点击 之后变换图片

cell.imageView.highlightedImage = image2;

更改单元格式

单元式样使用3种不同的单元元素:

图像:如果指定样式中包含图像,那么该图像将显示在单元文本左侧。

文本标签: 这是单元的主要文本。在我们之前使用的样式UITableViewCellStyleDefault中,文本标签是唯一在单元中显示的文本。

详细文本标签:这是单元的辅助文本,通常用作解释性的说明或标签。

将单元格格式UITableViewCellStyleDefault更改为UITableViewCellStyleSubtitle,两个文本元素都会显示。

3、相关代码:

1、在AppDelegate.h文件中

#import <UIKit/UIKit.h>


@class RootViewController;


@interface AppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;


@property (retain, nonatomic) RootViewController *mRootVC;


@end

2、在AppDelegate.m文件中

#import "AppDelegate.h"

#import "RootViewController.h"


@implementation AppDelegate


- (void)dealloc

{

    [_window release];

    [_mRootVC release];

    [super dealloc];

}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];


    self.window.backgroundColor = [UIColor whiteColor];

    

    RootViewController *pRootVC = [[RootViewController alloc]initWithNibName:nil bundle:nil];

    self.mRootVC = pRootVC;

    [pRootVC release];

    

    self.window.rootViewController = self.mRootVC;

    

    [self.window makeKeyAndVisible];

    return YES;

}


- (void)applicationWillResignActive:(UIApplication *)application

{


}


- (void)applicationDidEnterBackground:(UIApplication *)application

{


}


- (void)applicationWillEnterForeground:(UIApplication *)application

{


}


- (void)applicationDidBecomeActive:(UIApplication *)application

{


}


- (void)applicationWillTerminate:(UIApplication *)application

{


}


@end


3、在RootViewController.h文件中

#import <UIKit/UIKit.h>


@interface RootViewController : UIViewController

<UITableViewDataSource,UITableViewDelegate,UIActionSheetDelegate>


@property (retain, nonatomic) UITableView *mTableView;


//存储表中的数据

@property (retain, nonatomic) NSArray *mArr;


@end


4、在RootViewController.m文件中

#import "RootViewController.h"


@interface RootViewController ()


@end


@implementation RootViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}


- (void)viewDidLoad

{

    self.mArr = [UIFont familyNames];

    [super viewDidLoad];

    //创建初始化表视图

    self.mTableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];

    

    //设置表头的区域

    UIView *pView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];

    //设置表头的颜色

    pView.backgroundColor = [UIColor blueColor];

    //表头

    self.mTableView.tableHeaderView = pView;

    //表尾

    self.mTableView.tableFooterView = pView;

    //设置页眉高度

    

    self.mTableView.sectionHeaderHeight = 50;

    //设置委托对象

    self.mTableView.dataSource = self;

    self.mTableView.delegate = self;

    //添加到视图当中

    [self.view addSubview:self.mTableView];

}


#pragma mark-------------tableView DataSource-----

//每个分段中的行数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return [self.mArr count];

}

//每行的绘制

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

{

    static NSString *identifer = @"identifer";

    UITableViewCell *pCell = [tableView dequeueReusableCellWithIdentifier:identifer];

    

    if (nil == pCell)

    {

        pCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifer];

    }

    //获取当前行

    NSUInteger cellRow = [indexPath row];

    //根据行数找到数组中对应下标的数据

    NSString *pTempStr = [self.mArr objectAtIndex:cellRow];

    //设置文本内容

    pCell.textLabel.text = pTempStr;

    //设置文本字体

    pCell.textLabel.font = [UIFont fontWithName:pTempStr size:18];

    

    pCell.detailTextLabel.text = @"detailText";

    pCell.imageView.image = [UIImage imageNamed:@"1.png"];

    pCell.accessoryType = UITableViewCellAccessoryCheckmark;

    return pCell;

}

//设置页眉

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

{

    return @"I'm Header_Title";

}

//设置表尾

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

{

    return @"I'm Footer_Title";

}


#pragma mark ----------------------table delegate---------------

//选中某一行会调用

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    NSUInteger row = [indexPath row];

    NSString *pStr = [NSString stringWithFormat:@"你选中了第%d行", row];

    //模态视图

    UIActionSheet *pActionSheet = [[UIActionSheet alloc]initWithTitle:@"ActionSheet" delegate:self cancelButtonTitle:@"确认" destructiveButtonTitle:pStr otherButtonTitles:nil, nil];

    

    [pActionSheet showInView:self.view];

    //选中行逐渐淡出

    [self.mTableView deselectRowAtIndexPath:indexPath animated:YES];

}

//调整每一行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

    return 44;

}

//调整header高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

{

    return 20;

}

//对行内容进行偏移

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath

{

    return [indexPath row];

}


#pragma mark -------------------actionSheet delegate----------

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

{

    switch (buttonIndex) {

        case 0:

            NSLog(@"case 0");

            break;

        case 1:

            NSLog(@"case 1");

            break;

        default:

            break;

    }

}



- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (void)dealloc

{

    [_mTableView release];

    [_mArr release];

    [super dealloc];


}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值