UITableView的使用笔记

UITableView的使用基础:
1.实现UITableViewDelegate和UITableViewDataSource这两个protocol
2.在初始化方法中对Outlet的TableView实例进行定义:
   
  1. tableView1.dataSource=self
  2. tableView1.delegate=self
3.  UITableViewDataSource中有两个必须实现的方法:
1)这个是返回整体行数的
  
  1. var rowNum:Int=10
  2. func tableView(tableView:UITableView,numberOfRowsInSection section:Int) -> Int{
  3. return rowNum
  4. }
2)返回每行的具体内容
   
  1. func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)->UITableViewCell {
  2.    
  3.   var cell=UITableViewCell(frame:CGRect(x:0,y:0,width:320,height:48))
  4.   return  cell
  5. }
4.可以自定义Cell进行加载展示
新建一个类 继承自UITableViewCell

然后在该类的Init的方法中对定义的组件进行布局,并加入到Cell中去

  
  1. //
  2. //  CityCell.swift
  3. //  TableViewDemo1
  4. //
  5. //  Created by Jasoncool on 15/9/9.
  6. //  Copyright (c) 2015年 Jasoncool. All rights reserved.
  7. //
  8. import UIKit
  9. class CityCell: UITableViewCell {
  10.    
  11.    var cityLabel:UILabel?
  12.    var cityTextField:UITextField?
  13.    var citySwitch:UISwitch?
  14.    
  15.    
  16.   override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
  17.    
  18.    super.init(style: style, reuseIdentifier: reuseIdentifier)
  19.    //初始化子视图,子控件
  20.    cityLabel = UILabel(frame: CGRect(x: 5, y: 5, width: 80, height: 40))
  21.    cityTextField=UITextField(frame: CGRect(x: 90, y: 5, width: 80, height: 40))
  22.    citySwitch = UISwitch(frame: CGRect(x: 200, y: 5, width: 80, height: 40))
  23.    self.addSubview(cityLabel!)
  24.    self.addSubview(cityTextField!)
  25.    self.addSubview(citySwitch!)
  26.        
  27.    }
  28.   required init(coder aDecoder: NSCoder) {
  29.       fatalError("init(coder:) has not been implemented")
  30.   }
  31.    override func awakeFromNib() {
  32.        super.awakeFromNib()
  33.        // Initialization code
  34.    }
  35.    override func setSelected(selected: Bool, animated: Bool) {
  36.        super.setSelected(selected, animated: animated)
  37.        // Configure the view for the selected state
  38.    }
  39. }

随后在ViewController中加入对应代码

  
  1. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
  2.        var cellId="sundyCell"
  3.       //根据CellId寻找对应的Cell实例
  4.        var cell:CityCell? = tableView1.dequeueReusableCellWithIdentifier(cellId) as? CityCell
  5.        //如果实例为空则初始化该实例
  6.        if(cell==nil){
  7.            
  8.            cell= CityCell(style: UITableViewCellStyle.Value1, reuseIdentifier: cellId)
  9.        }
  10.        //cell.backgroundColor=UIColor.grayColor()
  11.        cell?.cityLabel?.text=citys[indexPath.row]
  12.        cell?.cityTextField?.placeholder="测试...."
  13.        cell?.citySwitch?.on=true
  14.        cell?.imageView?.image=UIImage(named: "portal")
  15.        cell?.textLabel?.text=citys[indexPath.row]
  16.        cell?.detailTextLabel?.text="more....."
  17.        cell?.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator//加入Item的向右箭头
  18.        
  19.      
  20.            
  21.            return cell!
  22.            
  23.  
  24.        
  25.    }

5.通过设置Tag并在StoryBoard中定义Cell界面

23122748_hEdR.png

在StoryBoard中加入Tag的设置,并对Cell进行布局。

然后在ViewController中这么写

  
  1. //
  2. //  ViewController.swift
  3. //  TableViewDemo1
  4. //
  5. //  Created by Jasoncool on 15/9/9.
  6. //  Copyright (c) 2015年 Jasoncool. All rights reserved.
  7. //
  8. import UIKit
  9. class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
  10.    @IBOutlet var tableView1: UITableView!
  11.    var citys=["A","B","C","D","E"]
  12.    override func viewDidLoad() {
  13.        super.viewDidLoad()
  14.        // Do any additional setup after loading the view, typically from a nib.
  15.        tableView1.dataSource=self
  16.        tableView1.delegate=self
  17.    }
  18.    
  19.    
  20.    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
  21.    {
  22.        return citys.count
  23.        
  24.    }
  25.    
  26.    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
  27.        var cellId="sundyCell"
  28.        var cell:UITableViewCell? = tableView1.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell
  29.        
  30.        if(cell==nil){
  31.            
  32.            cell=UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: cellId)
  33.        }
  34.        var label1=cell?.viewWithTag(1) as! UILabel
  35.        var textField1=cell?.viewWithTag(2) as! UITextField
  36.        var switch1=cell?.viewWithTag(3) as! UISwitch
  37.        
  38.        label1.text=citys[indexPath.row]
  39.        textField1.placeholder="test"
  40.        switch1.on=true
  41.        
  42.        var cell2:UITableViewCell? = tableView1.dequeueReusableCellWithIdentifier("sundyCell2") as? UITableViewCell
  43.        var label2 = cell2?.viewWithTag(1) as! UILabel
  44.        label2.text="战法地方啦的看法卡登仕狂蜂浪蝶疯狂的开发卡夫卡联发科"
  45.        if(indexPath.row%2==0){
  46.            
  47.            return cell!
  48.            
  49.        }else{
  50.            
  51.            return cell2!
  52.            
  53.        }
  54.        
  55.        
  56.    }
  57.    override func didReceiveMemoryWarning() {
  58.        super.didReceiveMemoryWarning()
  59.        // Dispose of any resources that can be recreated.
  60.    }
  61. }

6.TableView中加入Section和索引

  
  1. //
  2. //  ViewController.swift
  3. //  TableViewDemo6
  4. //
  5. //  Created by Jasoncool on 15/9/9.
  6. //  Copyright (c) 2015年 Jasoncool. All rights reserved.
  7. //
  8. import UIKit
  9. class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
  10.    @IBOutlet var tableView1: UITableView!
  11.    
  12.    var provinces=["山西","云南","广西"]
  13.    var cities = ["山西":["太原","临汾","晋城","太原","临汾","晋城","太原","临汾","晋城"],"云南":["昆明","大理","丽江","昆明","大理","丽江","昆明","大理","丽江"],"广西":["南宁","桂林","晋江","南宁","桂林","晋江","南宁","桂林","晋江"]]
  14.    
  15.    override func viewDidLoad() {
  16.        super.viewDidLoad()
  17.        // Do any additional setup after loading the view, typically from a nib.
  18.        tableView1.dataSource=self
  19.        tableView1.delegate=self
  20.    }
  21.    //返回每个Section中的行数
  22.    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  23.        
  24.        var provinceName=provinces[section]
  25.        
  26.        return cities[provinceName]!.count
  27.    }
  28.    
  29.    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  30.       var cellId="SundyCell"
  31.        var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell
  32.        if(cell == nil){
  33.            
  34.            cell=UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellId)
  35.        }
  36.        var proName=provinces[indexPath.section]
  37.        cell?.textLabel?.text = cities[proName]![indexPath.row]
  38.        cell?.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
  39.        
  40.        return cell!
  41.    }
  42.    //返回Section的数量
  43.    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
  44.       return  provinces.count
  45.    }
  46.    //填写section的header信息
  47.    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{
  48.        
  49.        return provinces[section]
  50.        
  51.    }
  52.    //填写section的footer信息
  53.    func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String?{
  54.        
  55.        return provinces[section]
  56.    }
  57.    //返回索引数组
  58.    func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject]! {
  59.        return provinces
  60.    }
  61.    override func didReceiveMemoryWarning() {
  62.        super.didReceiveMemoryWarning()
  63.        // Dispose of any resources that can be recreated.
  64.    }
  65. }

(待续

7.tableView的编辑操作

1) 在tableViewDataSource中的方法 canEditRowAtIndexPath  指定某一行或者多行进入编辑状态

2) tableViewDelegate中提供的方法editingStyleForRowAtIndexPath 返回的是 UITableViewCellEditingStyle 

UITableViewCellEditingStyle :提供两种操作,插入和删除

enum  UITableViewCellEditingStyle  :Int{

case None

case Insert

case Delete

}

3)tableViewDelegate中提供的方法titleForDeleteConfirmationButtonForRowAtIndexPath:删除确认按钮的文本显示

4)tableView组件提供的方法:setEditing  可以将一个TableView组件变为可编辑状态

5)tableViewDataSource中的方法commitEditingStyle  提交编辑状态

具体的删除提交代码:

  
  1.  func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
  2.        println(editingStyle.rawValue)
  3.        println("操作的是:\(indexPath.row)")
  4.        var proName=provinces[indexPath.section]
  5.        cities[proName]?.removeAtIndex(indexPath.row)
  6.        tableView1.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Bottom)
  7.    }







转载于:https://my.oschina.net/t5xgkow/blog/510002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值