iOS开发——UI_swift篇&UITableView实现索引功能

时间:2021-07-05 07:13:22

UITableView实现索引功能

 
 
关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天我吗就来讨论一下周末去实现它。
 
像iOS中的通讯录,通过点击联系人表格右侧的字母索引,我们可以快速定位到以该字母为首字母的联系人分组。
 
要实现索引,我们只需要两步操作:
  • (1)实现索引数据源代理方法
  • (2)响应点击索引触发的代理事件
 
效果图如下:
iOS开发——UI_swift篇&UITableView实现索引功能
 
代码如下:
 import UIKit

 class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{

     var tableView:UITableView?

     var adHeaders:[String] = ["a","b","c","d","e"]

     override func loadView() {
         super.loadView()
     }

     override func viewDidLoad() {
         super.viewDidLoad()

         //创建表视图
         self.tableView = UITableView(frame:UIScreen.mainScreen().applicationFrame,
             style:UITableViewStyle.Grouped)
         self.tableView!.delegate = self
         self.tableView!.dataSource = self
         //创建一个重用的单元格
         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
         self.view.addSubview(self.tableView!)
     }

     //实现索引数据源代理方法
     func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject]! {
         return adHeaders
     }

     //点击索引,移动TableView的组位置
     func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String,
         atIndex index: Int) -> Int {
         var tpIndex:Int =
         //遍历索引值
         for character in adHeaders{
             //判断索引值和组名称相等,返回组坐标
             if character == title{
                 return tpIndex
             }
             tpIndex++
         }

     }

     //设置分区数
     func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
         return adHeaders.count;
     }

     //返回表格行数
     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

     }

     // UITableViewDataSource协议中的方法,该方法的返回值决定指定分区的头部
     func tableView(tableView:UITableView, titleForHeaderInSection
         section:Int)->String
     {
         var headers =  self.adHeaders;
         return headers[section];
     }

     //设置分组尾部高度(不需要尾部,设0.0好像无效)
     func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
         return 0.1
     }

     //创建各单元显示内容(创建参数indexPath指定的单元)
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
         -> UITableViewCell
     {
         //为了提供表格显示性能,已创建完成的单元需重复使用
         let identify:String = "SwiftCell"
         //同一形式的单元格重复使用,在声明时已注册
         let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath)
             as UITableViewCell
         cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
         var secno = indexPath.section
         cell.textLabel?.text = self.adHeaders[secno]+String(indexPath.item)
         return cell
     }

     override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
     }
 }