自动完成SearchBar - 不是值单元格

时间:2016-03-21 14:50:48

标签: swift autocomplete uisearchbar

我正在尝试使用自动完成功能实现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!

}

1 个答案:

答案 0 :(得分:0)

如果您的数组为空并且返回1,则需要检查numberOfRowsInSection方法。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if autocompleteUrls.count != 0 {
        return autocompleteUrls.count
    }

    return 1

}

此外,您可以使用GitHub中的DZNEmptyDataSet这是一组很好的委托方法,如果没有要显示的数据,它会在tableView中显示一些内容。