【发布时间】:2016-02-20 03:51:01
【问题描述】:
在我的UITableView 中,我有带有头像图像和姓氏(UIImage 和标签)的单元格。我想在我的UITableView 中搜索。因此,当我输入我的用户名或姓氏时,它会在头像图像中显示用户名姓氏。
现在,我可以使用以下代码在数组内部进行搜索:
var rosters = [String: UIImage]()
var displayNames = [String]()
var filteredTableData = [String]()
// Here I remove all elements from the array and add to it user display name and avatar
rosters.removeAll(keepCapacity: false)
for user in OneRoster.buddyList.fetchedObjects! {
var roster = OneRoster.userFromRosterForJID(jid: user.jidStr)
var image = OneChat.sharedInstance.xmppvCardAvatarModule?.photoDataForJID(roster?.jid)
rosters[user.displayName] = UIImage(data: image!)!
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> onlineUserCell {
let cell:onlineUserCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! onlineUserCell
if (self.resultSearchController.active) {
cell.username.text = filteredTableData[indexPath.row]
//cell.avatarImage.image = images[indexPath.row]
return cell
}
}
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filteredTableData.removeAll(keepCapacity: false)
displayNames.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
for (name, image) in rosters {
displayNames.append(name)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (displayNames as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
}
let array = (displayNames as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
self.tableView.reloadData()
}
因此,此代码仅在姓名中搜索,没有头像图像。我想,我可以使用字典,如:
var users = [UIImage: String]()
然后按字符串搜索并在单元格中显示为UIImage 和字符串。但是我搜索了很多,找不到如何搜索,后来我可以通过字符串搜索并得到UIImage的结果。
有什么想法吗?
【问题讨论】:
-
你不应该真正使用多个数组来保存数据,它会很快变得混乱,创建一个结构或类来保存名称和相应的图像。然后使用 swift
filter搜索/过滤自定义对象数组。
标签: ios swift uitableview dictionary uisearchbar