【背景】
需要用swift实现,联系人列表的那种页面:
就有点像:
手机自带的联系人列表或者微信联系人列表。
左边是根据字母分组的,tableview
右边有根据字母支持快速滑动定位的
【折腾过程】
1.搜:
swift contact list
swift draw contact list
参考:
Address Book Tutorial in Swift and iOS – Ray Wenderlich
Address Book Tutorial in iOS – Ray Wenderlich
Alterplay/APAddressBook · GitHub
好像是:
针对于每个人的详细联系信息的那种类:
不是我此处要的。
2.搜:
swift tableview contact list
参考:
Adding Section and Index List in UITableView | iOS Programming 101
这个是我要的,但是是ObjC的代码。
所以自己去参考自己折腾。
3.看了上面的内容,知道了:
针对A。。Z,每一个部分,都是叫section,分区,分组
而右边的a到z,则是index list,检索,索引列表
下载已有的,没添加分组和检索列表的示例代码:
相关的参考资料:
titleForHeaderInSection - UITableViewDataSource Protocol Reference
然后自己折腾。
【总结】
最后用代码:
用代码:
ContactViewController.swift
//
// ContactViewController.swift
// xxx
//
// Created by licrifan on 15/10/24.
// Copyright © 2015年 licrifan. All rights reserved.
//
import UIKit
class ContactViewController: UIViewController {
var contactTableView:UITableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
//update frame
// print("self.view.frame=\(self.view.frame)") //self.view.frame=(0.0, 0.0, 375.0, 667.0)
self.view.frame = CGRectMake(
self.view.frame.origin.x,
self.view.frame.origin.y,
UIScreen.mainScreen().bounds.width,
UIScreen.mainScreen().bounds.height //667
- statusBarFrame.height //20
- HeightNaviBar //44, Note: can not use naviBarView.frame.height for naviBarView.frame is 0
- self.tabBarController!.tabBar.frame.height) //49
// print("self.view.frame=\(self.view.frame)") //self.view.frame=(0.0, 0.0, 375.0, 554.0)
//set to UITableViewStyle.Plain for support sectionIndexTitlesForTableView
self.contactTableView = UITableView(frame: self.view.bounds, style: UITableViewStyle.Plain)
self.contactTableView.delegate = gContactTableViewData
self.contactTableView.dataSource = gContactTableViewData
self.contactTableView.backgroundColor = ColorContactTableViewBackground
self.contactTableView.separatorColor = ColorContactTableViewCellSeperator
self.contactTableView.separatorInset = UIEdgeInsetsMake(0, 15, 0, 0)
self.contactTableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
//improve performance
self.contactTableView.estimatedRowHeight = HeightContactTableViewCell
self.contactTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: StrIdContactTableViewCell)
self.view.addSubview(self.contactTableView)
}
}ContactTableViewData.swift
//
// ContactTableViewData.swift
// xxx
//
// Created by licrifan on 15/11/19.
// Copyright © 2015年 licrifan. All rights reserved.
//
import UIKit
struct ContactItem {
var phoneNumberStr:String = ""
var nameStr:String = ""
}
struct ContactSectionItem {
var indexTitleStr:String = ""
var contactItemList:[ContactItem] = [ContactItem]()
}
class ContactTableViewData: UIViewController, UITableViewDataSource, UITableViewDelegate {
let contactIndexTitleList:[String] = [
"A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"]
var contactSectionItemList:[ContactSectionItem] = [ContactSectionItem]()
func generateContactSectionList(){
//reset
contactSectionItemList = [ContactSectionItem]()
for eachIndexTitle in contactIndexTitleList {
var currentContactSectionItem = ContactSectionItem()
var singleContactItem:ContactItem
switch eachIndexTitle {
case "C":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "ch"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
case "L":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "lm"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
singleContactItem = ContactItem()
singleContactItem.nameStr = "ljl"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
case "M":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "mjp"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
singleContactItem = ContactItem()
singleContactItem.nameStr = "mz"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
case "W":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "wt"
singleContactItem.phoneNumberStr = "11122233344"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
case "X":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "xc"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
singleContactItem = ContactItem()
singleContactItem.nameStr = "xjm"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
case "Z":
currentContactSectionItem.indexTitleStr = eachIndexTitle
singleContactItem = ContactItem()
singleContactItem.nameStr = "zbl"
singleContactItem.phoneNumberStr = "11112222333"
currentContactSectionItem.contactItemList.append(singleContactItem)
contactSectionItemList.append(currentContactSectionItem)
default:
break
}
}
}
func updateContactData(){
generateContactSectionList()
}
/***************************************************************************
* UITableViewDataSource functions
***************************************************************************/
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
print("numberOfSectionsInTableView")
print("currentContactSectionList.count=\(contactSectionItemList.count)")
return contactSectionItemList.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("numberOfRowsInSection section = \(section)")
print("contactSectionItemList[section].contactItemList.count=\(contactSectionItemList[section].contactItemList.count)")
return contactSectionItemList[section].contactItemList.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
//print("heightForRowAtIndexPath indexPath = \(indexPath)")
return HeightContactTableViewCell
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("cellForRowAtIndexPath indexPath = \(indexPath)")
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: StrIdContactTableViewCell)
cell.backgroundColor = ColorContactTableViewCellBackground
cell.selectionStyle = UITableViewCellSelectionStyle.Blue
cell.accessoryType = UITableViewCellAccessoryType.None
cell.accessoryView = nil;
cell.detailTextLabel?.text = nil
cell.textLabel?.font = FontContactTableViewCellText
cell.textLabel?.textAlignment = NSTextAlignment.Left
cell.textLabel?.textColor = ColorContactTableViewCellText
let curContactSectionItem = contactSectionItemList[indexPath.section]
let curContactItemInSection = curContactSectionItem.contactItemList[indexPath.row]
cell.textLabel?.text = curContactItemInSection.nameStr
let cornerHeaderImage:UIImage = drawSingleCornerHeaderImage(getFirstChar((cell.textLabel?.text)!), headerLabelFont: FontContactTableViewCellText, headerImageSize: SizeContactTableViewCellImage)
cell.imageView?.image = cornerHeaderImage
return cell
}
//right side: "A" ... "Z"
func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
print("sectionIndexTitlesForTableView")
print("contactIndexTitleList=\(contactIndexTitleList)")
return contactIndexTitleList
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
print("titleForHeaderInSection: section=\(section)")
print("contactSectionItemList[section].indexTitleStr=\(contactSectionItemList[section].indexTitleStr)")
return contactSectionItemList[section].indexTitleStr
}
/***************************************************************************
* UITableViewDelegate functions
***************************************************************************/
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("didSelectRowAtIndexPath indexPath = \(indexPath)")
}
}效果:
转载请注明:在路上 » 【已解决】swift中如何实现联系人列表