IOS开发之Tableview

作者: addstore | 来源:发表于2015-06-05 19:30 被阅读1010次

    据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的源码进而实现更多的功能。阅读文档和源码才能够更快速的成长!

    相关文章

      网友评论

        本文标题:IOS开发之Tableview

        本文链接:https://www.haomeiwen.com/subject/kaidqttx.html