我正在尝试使用自动完成功能实现searchBar。我想在开始输入后没有任何值时,会出现一个单元格“No results”。但是当我第一次选择searchField或者当我从中删除所有字符时,细胞就会消失。我设法让它出现在searchField是“”但我无法找到一种让它像我描述的那样工作的方法。
我的代码:
@IBOutlet weak var searchField: UISearchBar!
@IBOutlet var autocompleteTableView: UITableView!
var pastUrls = ["Men", "Women", "Cats", "Dogs", "Children"]
var autocompleteUrls = [String]()
var searchActive : Bool = false
override func viewDidLoad() {
super.viewDidLoad()
searchField.delegate = self
autocompleteTableView.backgroundColor = UIColor.clearColor()
autocompleteTableView!.delegate = self
autocompleteTableView!.dataSource = self
autocompleteTableView!.scrollEnabled = true
autocompleteTableView!.hidden = true
}
func searchBar(searchBar: UISearchBar, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
autocompleteTableView.hidden = false
let substring = (searchBar.text! as NSString).stringByReplacingCharactersInRange(range, withString: text)
searchAutocompleteEntriesWithSubstring(substring)
return true
}
func searchAutocompleteEntriesWithSubstring(substring: String) {
autocompleteUrls.removeAll(keepCapacity: false)
for curString in pastUrls {
if curString.lowercaseString.rangeOfString(substring) != nil {
autocompleteUrls.append(curString)
}
}
autocompleteTableView!.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return autocompleteUrls.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell")
if let _ = cell {
let index = indexPath.row as Int
cell!.textLabel!.text = autocompleteUrls[index]
} else {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "cell")
}
return cell!
}
答案 0 :(得分:0)
如果您的数组为空并且返回1,则需要检查numberOfRowsInSection
方法。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if autocompleteUrls.count != 0 {
return autocompleteUrls.count
}
return 1
}
此外,您可以使用GitHub中的DZNEmptyDataSet
这是一组很好的委托方法,如果没有要显示的数据,它会在tableView
中显示一些内容。