Swift之UITableView的使用

Swift和OC中UITableView的使用基本是差不多,只是有一些语法上的差异。下面我们一步一步从0开始写一个tableView。

一、创建tableView

import UIKit

let ID = "Cell" //cell的ID,建议像这样写一个常量,不要直接使用"Cell"

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { //0.遵守协议

    override func viewDidLoad() {
        super.viewDidLoad()

        //1.创建UITableView(跟OC几乎一样)
        var tableView = UITableView(frame: view.bounds, style: UITableViewStyle.Plain)

        //2.注册Cell
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: ID)
        //下面这种写法也是可以的
        //tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: ID)

        //3.设置数据源和代理
        tableView.dataSource = self
        tableView.delegate = self;

        //4.添加到view中
        self.view.addSubview(tableView)
    }
}

注意:1.协议的写法,不需要写<>。2.上面的代码中第0步和第3步会报错,不要惊慌,暂时无视,并不是代码有问题,是因为我们没有实现相应的协议方法。

二、准备假数据

    // 懒加载
    lazy var datas: [Int] = {
        // 创建一个存放int的数组
        var nums = [Int]()
        // 添加数据
        for i in 0...50 {
            nums.append(i)
        }
        // 返回
        return nums
    }()

这里采用懒加载,Swift的懒加载和OC差别还是比较大的,需要注意一下。

三、实现协议方法

  // MARK: - UITableViewDataSource & UITableViewDelegate

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //返回有多少行Cell, 这里返回数组的count
        return datas.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 获得cell
        let cell = tableView.dequeueReusableCellWithIdentifier(ID, forIndexPath: indexPath) as! UITableViewCell

        // 配置cell
        cell.textLabel!.text = "假数据 - \(datas[indexPath.row])"

        // 返回cell
        return cell
    }

解释几个可能有点迷糊的地方:

  1.as:这个东西比较符合人类思维,给苹果点个赞。意思就是把什么当作什么,在上面的代码中,由于方法dequeueReusableCellWithIdentifier的返回值是

  AnyObject(也就是OC中的id类型),所以需要通过as告诉编译器这实际上是一个UITableViewCell。

  2.!(感叹号):这玩意就是告诉编译器我确定这里的的cell.textLabel一定是非nil的, 可以放心的执行后面的。as后面的!也是一样的道理。

至此,可以编译运行看看效果了.

四、增加左滑删除功能

实现一个方法即可

 // 提交编辑操作
 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle,   forRowAtIndexPath indexPath: NSIndexPath) {
     // 如果是删除操作
     if editingStyle == .Delete {
         // 从数组中移除对应位置的数据
         datas.removeAtIndex(indexPath.row)
         // 删除表格中对应行的数据
         tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
     }
 }

大功告成,运行看看效果吧。祝大家生活愉快!

时间: 2024-10-06 12:13:57

Swift之UITableView的使用的相关文章

Swift 实现UITableView报错, does not conform to protocol &#39;UITableViewDataSource&#39;

Swift语言中的UITableView中着实很坑爹,为什么呢,因为在遵循协议后经常会报这样的错误:does not conform to protocol 'UITableViewDataSource'.而且是第一次尝试的伙伴们经常会发现,我写的代码没有问题呀,该写的都写了,为什么还是报错呢,有的时候是xcode的问题,有的时候又是自己遵循的协议中有必需实现的方法而没有实现导致的.所以遇到这种问题,大家不妨跳进代理中去看看必须实现的方法都实现的没有. 下面是我写的一个小demo,大家可以看看.

Swift 给UITableView 写extension 时 报错 does not conform to protocol &#39;UITableViewDataSource&#39;

那是因为你没有实现 数据源和代理方法 实现下就好了 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return UITableViewCell() } Sw

iOS开发——实战篇Swift篇&amp;UItableView结合网络请求,多线程,数据解析,MVC实战

UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高级知识:网络请求,JSON数据解析一起应用到一个项目中来. 好了,废话不多说,我们直接开始吧. 首先看看最终的效果: 是不是很简单,就是个UItableView显示一些简单的数据,如果你真的觉得太简单了,那么请绕道,寻找更深入东西,但或者没有你想的那么简单,这不仅仅是一个tableView,为什么呢

swift的UITableView的使用

UITableView是app开发中常用到的控件,功能很强大,多用于数据的显示.下面以一个简单的实例来介绍其基本用法. 先建一个工程 代码如下: import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { private var dataSource: Dictionary<String, [String]>? //定义表格的数据源 private var k

【swift_3】swift之UITableView和UINavigation视图控制器

Demo:链接: http://download.csdn.net/download/riven_wn/9401961 AppDelegate [objc] view plain copy var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { var VC = 

[iOS]swift之UITableView添加通过xib创建的headerView坑爹问题

情景是这样的,我UITableView添加了一个HeaderView,这个HeaderView是通过xib创建,是UIView.出来的结果却出乎意料,UITableView的Cell最顶部的几个被HeaderView给遮挡了---我勒个去--神马情况???!!! 于是哥通过看层次结构,发现运行出来的HeaderView和Cell列表不在同一层次,理应是同一层才对呀!!!!于是我用其他xib试试,情况一样,然后改用代码创建 UIView() 类似这种方式,这样就是正常的,HeaderView和Ce

swift中UITableView的简单使用

import UIKit /// TableViewDataSource展示 class YJTableViewDataSourceVC: UIViewController, UITableViewDataSource { /// 数据源 var data = [[Int]]() /// UITableView @IBOutlet weak var tableView: UITableView! // MARK: - view override func viewDidLoad() { supe

iOS开发——高级UI&amp;带你玩转UITableView

带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实际开发中用起来却没有那么简单就是因为他结合MVC使用,涉及到了模型数据的读取,自定义View,功能的拓展和更好的解藕,下面就带你玩一遍: UITableView的两种样式 UITableViewStylePlain UITableViewStyleGroupeds accessoryType UIT

iOS UITableView(一)

UITableview系列内容包括: 1.纯代码创建UITableview: 2.cell的样式.点击事件,cell的重用等: 3.页面的下拉刷新.上拉加载: 4.自定义cell. 由于内容过多,分成多篇来介绍. 本文主要介绍创建UITableview.cell的样式.cell的重用.cell的点击事件.cell左滑按钮等内容. 1.创建UITableview 首先在ViewController的类名后面添加UITableViewDelegate和UITableViewDataSource. 如