iOS的表视图并不简单,它是需要修改.h中加两个委托进去,同时在.m文件实现一系列固定的函数,才能完成表视图的创建。一切犹如当初点击空白处关闭键盘需要一段代码才能实现一样,表视图的创建也不像安卓一样是理所当然。我曾天真的认为安卓一个java一个xml,然后还要用适配器添加数据到ListView已经够烦了,没想到iOS搞个表视图更烦。不过也罢了,下次需要就直接来个代码的复制粘贴了。
用一个例子来说明这个问题:
列表视图中,记载了一系列的广东城市,然后点击一个会弹窗,将点击的内容显示出来。以下是制作过程:
1、拖入一个Table View而不是Table View Controller注意。然后Prototype Cells设置为0,之后对于Table View按着Ctrl向View Controller拉线,做两次这样的动作,将dataSource和delegate都选上。意思这个View Controller对应的两个ViewController.h与ViewController.m将完成数据源提供与表视图初始化的工作。
2、直接将ViewController.h修改如下,在其集成类中加入<UITabBarDelegate,UITableViewDataSource>,同时定义一个名为listData的数组。
//
// ViewController.h
// TableView
//
// Created by pc on 17-6-1.
// Copyright (c) 2017年 pc. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITabBarDelegate,UITableViewDataSource>
@property(nonatomic,retain) NSArray *listData;
@end
3、之后将ViewController.m修改成如下代码,完工。
//
// ViewController.m
// TableView
//
// Created by pc on 17-6-1.
// Copyright (c) 2017年 pc. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize listData;//对listData设置getter、setter,也就是开个接口,从此可以对其进行操作
- (void)viewDidLoad//程序初始化必须要执行的函数
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSArray *array=[[NSArray alloc]initWithObjects:@"广州",@"深圳",@"梅州",@"东莞",@"潮汕",@"肇庆",@"四会",@"佛山",@"湛江",@"江门",@"阳江",@"珠海", nil];//定义你自己喜欢的数组
self.listData=array;//将array塞给在头文件定义的listData
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//表视图必须要有的初始化函数之一,总行数初始化
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.listData count];//这个很简单,就是listData的长度,直接返回即可。
}
//表视图必须要有的初始化函数之一,每一行的初始化
static NSString *TableIdentifier=@"TableIdentifier";//表格的标识,必须要有,虽然没什么卵用
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:TableIdentifier];//所谓的“单元格”,也就是每一行的指针
if(cell==nil){//如果还有行没创建,那就继续创建
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableIdentifier];
}
cell.textLabel.text=[listData objectAtIndex:[indexPath row]];//表的每一行,就是listData的内容
[tableView setScrollEnabled:YES];//iOS默认这个表视图是不能滚动的,真不知道想什么的,要设置成滚动才能滚动
return cell;
}
//表视图选择性的初始化函数之一,每一行被点击之后所发生的事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];//拿到被点击单元格的指针
/*弹窗*/
UIAlertView *uiAlertView=[[UIAlertView alloc]initWithTitle:@"你点击的是" message:cell.textLabel.text delegate:nil cancelButtonTitle:@"确定!" otherButtonTitles:nil];
[uiAlertView show];
}
@end
上述代码的2个初始化函数是必须要有的,也不知道为什么,也没法解释为什么,iOS就是这样对我们开发者要求的。我们下次用只要改改*array的内容就好。
之后表的点击响应函数可以没有,不过一般都会写上的,需要做什么,各位根据自己的需要改改里面的内容即可。
可以看到iOS的表视图,你不知道这样的公式,你根本就不知道怎么玩-_-!