2015-06-02 5 views
3

Я пытаюсь создать autocompleter с помощью IOS 8, Swift и Xcode 6.3UITableViewCells не отображается в первый раз

У меня есть проблема, которую я пытаюсь решить, но я отказался ... Я надеюсь, что кто-то может помочь здесь. Проблема в том, что (пользовательский) UITableViewCell не отображается, когда начальный dataSource пуст. При добавлении данных в datasource и перезагрузке tableView, ячейки СЛЕДУЕТ отображать, но они не ... По крайней мере, в первый раз они не ... Во второй раз они DO ... Когда я инициализирую таблицу с непустыми данными проблема не возникает. Я думаю, что что-то не так с dequeueReusableCellWithIdentifier. В начале не найдены никакие повторно используемые ячейки или что-то еще. Но я не знаю, почему ...

Соответствующий код, в 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() 
} 

Я создал образец проекта на GitHub:

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

И фильм на YoutTube, чтобы показать, что идет не так:

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

Может ли кто-нибудь взглянуть на него и обнаружить ошибку ...?

Заранее благодарен!

+0

Вместо того, чтобы разместить ссылку на свой проект, сузить проблему до определенного бита кода и пасты код в ваш вопрос. Объясните, что происходит и что должно произойти. – rmaddy

+0

Спасибо за советы, я добавил соответствующий код. – Dirk

ответ

3

Вы случайно скрыли свою камеру.

  1. Открыть Main.storyboard
  2. Select Cell
  3. Uncheck Hidden

примечание стороны: А почему он показывает второй раз с ячейкой скрыт? Кажется, это ошибка. Он все равно должен быть скрыт (print cell.hidden, обратите внимание, что это всегда верно, несмотря на отображение текста на экране).

+0

Отличная находка! Но теперь мне любопытно, почему ячейки снова будут видны во второй раз, когда они будут использованы. – Pim

+0

Вау, как ты это нашел? Дэвид aka Debug King? Спасибо! – Dirk

+0

Теперь, когда я смотрю на него снова, он не перезагружается (hidden == true, даже когда текст отображается). Можете представить радар с образцом проекта, чтобы Apple заглянула в него. В то же время не скрывать камеру будет работать. –

1

Я думаю, вам нужно изменить свой код. Посмотрите ниже код. Это потому, что если вы помните в Objective C, вам нужно было проверить, было ли Cell нолем, а затем инициализировать его. Идентификатор повторного использования обычно повторно использует уже созданную ячейку, но при первом запуске это не работает, потому что нет ячейки для использования. Ваш текущий код предполагает, что ячейка создается (повторно используется), потому что вы используете! в декларации, так что если вы используете дополнительный (?) может быть пустым, и вы затем можете создать ячейку

var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? AutocompleteTableViewCell 

    if cell == nil 
    { 
     //You should replace this with your initialisation of custom cell 
     cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL") 

    } 

    cell.title.text = filteredWords[indexPath.row] 
    return cell