2016-03-21 3 views
0

Я пытаюсь реализовать searchBar с автозаполнением. Я хочу, когда после начала ввода значения нет, появится ячейка «Нет результатов». Но когда я сначала выбираю searchField или когда я удаляю из него все символы, ячейка исчезает. Мне удается сделать это, когда searchField «", но я не могу найти способ заставить его работать, как я описал.Autocomplete SearchBar - не ячейка значения

Мой код:

@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

Вам нужно проверить в вашем методе numberOfRowsInSection если массив пуст, и если он вернется 1.

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

    return 1 

} 

Кроме того, вы можете использовать DZNEmptyDataSet из GitHub, который представляет собой прекрасный набор методов делегатов, который представит что-то в вашем tableView, если нет данных для отображения.

Смежные вопросы