【发布时间】:2016-04-26 08:52:24
【问题描述】:
我正在尝试在我的 json 文件结果中创建搜索过滤器。
所以我有以下代码
import UIKit
import Alamofire
import SwiftyJSON
class checkViewController: UIViewController, UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var checkTable: UITableView!
var arrRes = [[String:AnyObject]]()
var filteredData = [[String:AnyObject]]()
override func viewDidLoad() {
super.viewDidLoad()
checkTable.dataSource = self
searchBar.delegate = self
filteredData = arrRes
Alamofire.request(.GET, "https://example.com/search", parameters: ["q": "", "type": "name"])
.responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)
print(swiftyJsonVar)
if let resData = swiftyJsonVar["data"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
}
if self.arrRes.count > 0 {
self.checkTable.reloadData()
}
}
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrRes.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("checkInCellView", forIndexPath: indexPath)
var dict = arrRes[indexPath.row]
cell.textLabel?.text = dict["name"] as? String
return cell
}
}
我正在尝试在我的班级中插入UISearchResultsUpdating,但我收到一个不是成员的错误。所以我正在尝试UISearchBarDelegate,但我只能在 [String] 数组中找到一种方法,而不是在这个示例中找到 [[String:AnyObject]]
class ViewController: UIViewController, UITableViewDataSource, UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
let data = ["New York, NY", "Los Angeles, CA", "Chicago, IL", "Houston, TX",
"Philadelphia, PA", "Phoenix, AZ", "San Diego, CA", "San Antonio, TX",
"Dallas, TX", "Detroit, MI", "San Jose, CA", "Indianapolis, IN",
"Jacksonville, FL", "San Francisco, CA", "Columbus, OH", "Austin, TX",
"Memphis, TN", "Baltimore, MD", "Charlotte, ND", "Fort Worth, TX"]
var filteredData: [String]!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
searchBar.delegate = self
filteredData = data
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TableCell") as UITableViewCell
cell.textLabel?.text = filteredData[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filteredData = searchText.isEmpty ? data : data.filter({(dataString: String) -> Bool in
return dataString.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
})
}
// This method updates filteredData based on the text in the Search Box
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// When there is no text, filteredData is the same as the original data
if searchText.isEmpty {
filteredData = data
} else {
// The user has entered text into the search box
// Use the filter method to iterate over all items in the data array
// For each item, return true if the item should be included and false if the
// item should NOT be included
filteredData = data.filter({(dataItem: String) -> Bool in
// If dataItem matches the searchText, return true to include it
if dataItem.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil {
return true
} else {
return false
}
})
}
tableView.reloadData()
}
}
还有什么方法可以使它也适用于 [[String:AnyObject]] ???
因为如果我尝试这样做,我会得到一个错误
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filteredData = searchText.isEmpty ? arrRes : arrRes.filter({(dataString: [String:AnyObject]) -> Bool in
return dataString.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
})
}
“[String : AnyObject]”类型的值没有成员“rangeOfString”
知道如何处理吗?
【问题讨论】:
标签: ios uitableview uiviewcontroller swift2 uisearchbar