UITableview-实现方式(一)

1.什么是UITableview?

图中展示的就一个基础的UItableView。

2.如何实现?

  • 1 直接继承与UITableViewController

建立好文档后先了解下UITableViewController有那些特性。
选择UITableViewController.h文件,按住 Ctrl + commend键光标移至下图深灰背景的UITableViewController位置然后单击。

单击之后会跳转到一新的页面看如下选择中的内容

其实我们可以看到尖括号中的UITableViewDelegate代理 UITableViewDataSource数据源UITableViewDelegateUITableViewDataSource分别都有自己的方法。我们先来看UITableViewDataSource用上面的Ctrl + commend方法点击UITableViewDataSource

1
2
3
4
5
`@required`表示的是必须实现的方法即想让一个tableview能够正常运行就必须实现以下方法

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

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

@optional表示可选的方法当想实现某些特殊的功能的时候即会用到里面的方法。

回到新建的TableViewController文档选择TableViewController.m文件,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

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

return 1;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}

return cell;
}

然后在AppDelegate.mTableViewController设置为rootViewController根试图

1
2
3
4
5
6
7
8
9
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];

TableViewController *tableview = [[TableViewController alloc] init];
self.window.rootViewController = tableview;

return YES;
}

然而当运行发现奔溃报如下错误

1
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

意思是没有注册相关cell没有cell自然也不会显示相关的行。还是在TableViewController.m文件

1
2
3
4
5
- (void)viewDidLoad {
[super viewDidLoad];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
}

再次运行成功这样一个最简单的UITableView就实现了