据wealon说,在ios开发过程中,经常要使用Tableview。作为小白的我,经过几番折腾,也终于使用Tableview做出了一个小页面,下面我就来说一下Tableview的使用。
一、在storyboad中创建Tableview
在storyboad中创建Tableview,有两种方法
1、直接拖出一个UITableView Controller
这种方法是推荐做法,因为UITableView的datasource和dalegate都是默认绑定好的,不用手动绑定
2、拖动一个TableView到ViewController
这种方法需要ViewController继承UITableViewDataSource和UITableViewDelegate,并进行绑定
我在实际动手的时候使用的是第二种方法(主要是为了学习),打开ViewViewController.storyboard,拖动一个TableView.
二、继承并实现UITableViewDataSource的方法
class ViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate{
//...
}
刚开始写到这里的时候,编译器就开始报错了!!!!
难道是我写错了么?仔细检查,检查仔细,仍然没有错!!!!
重建工程,各种尝试,各种折腾,总之,教程上就能好好工作,我的代码就是报错了,难道是xcode有问题?
这个问题直到我问了notecode和wealon之后才清楚的知道,这并不是代码错了,只是没有实现UITableViewDataSource的方法。按住command键,然后鼠标点击UITableViewDataSource,在这个源文件中,有两个非optional的func,分别是
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
这两个方法都是在对Tableview进行初始化,
第一个方法,每个section中有多少个tablecell。默认情况下,只有一个section。也可以创建多个section。
第二个方法,indexPath包含了每个tablecell所在的section和row,可以简单的理解每个tablecell所在的位置。可以在这个方法内部对每个tablecell进行控制,数据填充等。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return 10 //可根据实际需要进行更改
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = UITableViewCell()
return cell
}
这样,就可以编译运行了。但是,运行之后都是空白的,啥也没有。
二、数据填充
接下来,要做三件事
1、修改tablecell的style为basic
,并给identifier
一个值,如initCell
2、按住command 拖动tableview将datasource和delegate绑定到ViewController
3、重新实现第二个方法
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("initCell") as! UITableViewCell
return cell
}
这时候编译运行,就能看到10个一样的tablecell出现了。
那么,我打算让这10个tablecell显示不一样的内容,怎么做呢?在ViewController顶部声明一个数组
var titles = ["title1","title2","title3","title4","title5","title6","title7","title8","title9","title10"]
重新实现第二个方法
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("initCell") as! UITableViewCell
cell.textLabel?.text = titles[indexPath.row]
return cell
}
编译运行,哈,成功啦!
其实做到这里,仅仅是了解了tableview的一小部分,更多的内容,可以查看tableview的源码进而实现更多的功能。阅读文档和源码才能够更快速的成长!
网友评论