繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM