首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选联系人返回混合联系人信息- Swift

问筛选联系人返回混合联系人信息- Swift
EN

Stack Overflow用户
提问于 2019-03-20 05:36:13
回答 1查看 225关注 0票数 1

我是一个新的Swift开发人员。我已经成功地从手机中拉出了联系人,并将它们保存在一个联系人数组中,每个联系人都具有以下结构:

代码语言:javascript
复制
struct Contact {

var contactDetails:CNContact
var isFavorite:Bool

该数组称为deviceContacts。

我还设置了一个名为searchResults的联系人空数组。

我在“联系人”表中有一个搜索栏,我希望在您键入时自动过滤联系人。我可以使用搜索栏的以下代码成功地做到这一点:

代码语言:javascript
复制
extension ContactsViewController: UISearchBarDelegate {

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    searchResults = deviceContacts.filter{($0.contactDetails.familyName.prefix(searchText.count) == searchText)}
    searching = true
    tableView.reloadData()

    // This does not work.  It filters by the last name.  But it keeps John as the first name, etc. It does not pull the full contact.

}    
}

虽然此函数将在您键入时进行搜索,并在您键入更多字符时实时过滤结果,但结果是混淆的。它们显示正确的姓氏,但显示错误的名字。名字从列表的顶部开始。因此,例如,如果您在模拟器中搜索"Bell“的标准联系人,您将得到Bell,John。贝尔是名单中的第二人,约翰是名单中的第一人。

为此,我尝试使用谓词搜索联系人,但无法让它在您实时键入时进行搜索,就像此函数所做的那样。

有没有办法在搜索时拉出完整的联系人?或者只提取匹配的联系人的引用,并将该联系人放入searchResults数组?或者使用谓词方法在输入时进行搜索的方法?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 05:54:00

在cellForRowAt中,我犯了一个错误,没有更改对名的searchResults的引用,只更改了姓的引用。下面是tableView的代码:

代码语言:javascript
复制
if searching {
    cell.textLabel?.text = searchResults[indexPath.row].contactDetails.familyName+", "+searchResults[indexPath.row].contactDetails.givenName
} else {
    cell.textLabel?.text = deviceContacts[indexPath.row].contactDetails.familyName+", "+deviceContacts[indexPath.row].contactDetails.givenName
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55250352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档