Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITableViewCells not displaying first time

I'm trying to create an autocompleter using iOS 8, Swift and Xcode 6.3

I have a problem that I'm trying to solve, but I gave up... I hope someone can help here. The problem is that (custom) UITableViewCell's are not displaying when the initial dataSource is empty. When adding data to datasource and reloading the tableView, the cells SHOULD display, but they don't... At least, the first time they don't... A second time, they DO... When I initialize the table with non-empty data, the problem doesn't occur. I guess something goes wrong with dequeueReusableCellWithIdentifier. In beginning, no reusable cells are found, or something. But I don't know why...

Relevant code, in ViewController.swift:

// filteredWords is a [String] with zero or more items

@IBAction func editingChanged(sender: UITextField) {
    autocompleteTableView.hidden = sender.text.isEmpty
    filteredWords = dataManager.getFilteredWords(sender.text)
    refreshUI()
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! AutocompleteTableViewCell
    cell.title.text = filteredWords[indexPath.row]
    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredWords.count
}

func refreshUI() {
    self.autocompleteTableView.reloadData()
}

I created a sample project on github:

https://github.com/dirkpostma/swift-autocomplete

And a movie on YoutTube to show what goes wrong:

https://www.youtube.com/watch?v=ByMsy4AaHYI

Can anyone look at it and spot the bug...?

Thanks in advance!

like image 473
Dirk Avatar asked Feb 09 '23 23:02

Dirk


1 Answers

You've accidentally hidden your cell.

  1. Open Main.storyboard
  2. Select Cell
  3. Uncheck Hidden

Side note: As for why it's displaying the second time around with the cell hidden? It appears to be a bug. It should still be hidden (print cell.hidden, notice it's always true despite showing the text on the screen).

like image 159
David McGraw Avatar answered Feb 12 '23 11:02

David McGraw