![](/img/trans.png)
[英]iOS Swift - Show Contacts in TableView using UILocalizedIndexedCollation
[英]How to show contacts with APAddressBook in TableView
我需要使用APAddressBook的帮助。
我不明白如何使用APAddressBook加载和显示联系人。
我认为此功能可从通讯录中获取所有联系人
func loadContacts() {
self.addressBook.loadContacts({
(contacts: [APContact]?, error: NSError?) in
if let unwrappedContacts = contacts {
print(unwrappedContacts)
} else {
// show error...
这个函数提取名字
func contactName(contact :APContact) -> String {
if let firstName = contact.name?.firstName, lastName = contact.name?.lastName {
return "\(firstName) \(lastName)"
}
else if let firstName = contact.name?.firstName {
return "\(firstName)"
}
else if let lastName = contact.name?.lastName {
return "\(lastName)"
}
else {
return "Unnamed contact"
}
}
我不明白如何在此处显示这些名称:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("contacts", forIndexPath: indexPath) as! ContactsTableViewCell
// Configure the cell...
cell.contactsNumberLabel.text = contactsListNumbers[indexPath.row]
cell.contactsNameLabel.text = contactListNames[indexPath.row]
return cell
}
我不太确定这个库但是我们可以看到, unwrappedContacts
是包含有关从contactBook每个用户的所有信息的数组。 因此我们最好的选择是遍历此数组,将其分解然后分配给新数组。
根据一些研究,我做到了,它说该库包含少数字段,例如
可用字段:APContactFieldFirstName-联系人姓氏APContactFieldMiddleName-联系人中间名APContactFieldLastName-联系人姓氏APContactFieldCompany-联系人公司(组织)APContactFieldPhones-联系人电话阵列
struct ContactStructure
{
var firstname:String?
var lastname:String?
}
var arrayOfContacts = [ContactStructure]()
for each in unwrappedContacts
{
var firstname = each.APContactFieldFirstName as! String
var lastname = each.APContactFieldLastName as! String
var SingleContact = ContactStructure()
singleContact.firstname = firstname
singleContact.lastname = lastname
arrayOfContacts.append(SingleContact)
// Then reloadData of the tableView
}
请注意,每个对象都是数组中的单个对象,因此当您执行each.
您应该查看该类或结构所拥有的方法和属性
然后,您将使用该arrayOfContacts
填充arrayOfContacts
的单元格
这几乎是我的完整代码:
class ContactsTableViewController: UITableViewController {
let addressBook = APAddressBook()
struct ContactStructure {
var firstname:String?
var lastname:String?
}
var arrayOfContacts = [ContactStructure]()
override func viewDidLoad() {
super.viewDidLoad()
loadContacts()
}
func loadContacts() {
self.addressBook.loadContacts({
(contacts: [APContact]?, error: NSError?) in
if let unwrappedContacts = contacts {
for each in unwrappedContacts {
let firstname = each.name?.firstName
let lastname = each.name?.lastName
var singleContact = ContactStructure()
singleContact.firstname = firstname
singleContact.lastname = lastname
self.arrayOfContacts.append(singleContact)
}
} else if let unwrappedError = error {
let alert = UIAlertView(title: "Error", message: unwrappedError.localizedDescription,
delegate: nil, cancelButtonTitle: "OK")
alert.show()
}
})
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// for now 1 should be fine
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ContactsTableViewCell
//Here I get error Cannot subscript a value of type '[ContactsTableViewController.ContactStructure]'
cell.nameLabel.text = arrayOfContacts[indexPath.row]
return cell
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.