如何在TableView中显示与APAddressBook的联系人

时间:2015-12-02 11:49:26

标签: ios swift abaddressbook

我需要一些使用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
}

2 个答案:

答案 0 :(得分:0)

我对此库不太确定但是我们可以看到unwrappedContacts是一个数组,其中包含有关联系簿中每个用户的所有信息。所以我们最好的选择是迭代这个数组,然后将其分解,然后将其分配给新的数组。

根据一些研究,我做了它说这个库包含少数字段,如

  

可用字段:   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填充tableview的单元格

答案 1 :(得分:0)

这是我的完整代码:

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
}