나는 UITableViewController
을 가지고 있으며, 검색 막대를 헤더보기로 추가했습니다. 검색 막대의 텍스트가 변경되었지만 작동하지 않는 경우 테이블보기 데이터를 다시로드하려고합니다.검색 결과를 UITableView에 표시하기
여기 내 textDidChange
방법입니다. 컨텍스트의 경우 jsonArray
은 [[String: AnyObject]]
이며 다른보기 컨트롤러에서 전달됩니다. 그런 다음 searchResults 배열은 jsonArray
에서 viewDidLoad()
으로 설정되고 테이블보기는 searchResults를 데이터 소스로 사용합니다.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.characters.count == 0 {
searchResults?.removeAll()
searchResults = jsonArray!
} else {
searchResults?.removeAll()
for market in jsonArray! {
let titleRange = market["name"]?.range(of: searchText, options: .caseInsensitive)
var address = String()
var city = String()
var state = String()
var zip = Int()
if let address1 = market["address1"] as? String {
address = address1
}
if let city1 = market["city"] as? String {
city = city1
}
if let state1 = market["state"] as? String {
state = state1
}
if let zip1 = market["zip"] as? Int {
zip = zip1
}
let zipCode = String(describing: zip)
let addressString = String("\(address) " + "\(city), " + "\(state) " + "\(zipCode)")
let addressRange = addressString?.range(of: searchText, options: .caseInsensitive)
if titleRange != nil {
searchResults?.append(market)
} else if addressRange != nil {
searchResults?.append(market)
}
}
}
tableView.reloadData()
}
나는 루프에 대한 후 다른 문의 끝에이 인쇄 문을 추가했고 내 범위가 제대로 작동하지 않는 것 같습니다 있도록 배열이 원래 포함 된 모든 개체가 포함되어 있는지 보여주는 것 .
print("search array: \(searchResults?.count)")
NSArray가 아닌 Swift 배열을 사용하고 있습니다. – raginggoat
ok 그것에 대해 srrry –