2015-06-12 2 views
1

Я видел похожие вопросы, заданные здесь, но ни один из них не очень полезен для меня конкретно.Таблица View ReloadData function not triggering cellForRowAtIndexPath Swift

Я реализую панель поиска в моем представлении таблицы, и похоже, что все хорошо, и нет никаких ошибок. Я просмотрел код несколько раз и не могу найти никаких ошибок. Поэтому я начал отлаживать.

Вот моя функция поиска:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 

    var filtered:[Room] = filterz(rooms, txt: searchText) 

    //println(filtered.count) 

    if(filtered.count == 0){ 
     searchActive = false 
    } else { 
     searchActive = true 
    } 

    self.tView.reloadData() 
} 

Я могу видеть, что это прекрасно работает в качестве его распечатки правильного подсчета. Однако я не уверен в функции reloadData. я понял, что это вызовет функцию cellForRowAtIndexPath, которая здесь:

func tableView(tableView:UITableView,cellForRowAtIndexPathindexPath:NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("RoomCell", forIndexPath: indexPath) as! UITableViewCell 

    var room:Room = rooms[indexPath.row] 

    if(searchActive){ 
     room = filtered[indexPath.row] 
    } 

    if let nameLabel = cell.viewWithTag(200) as? UILabel{ 

     nameLabel.text = room.name 
     println(room.name) 

    } 

    if let sizeLabel = cell.viewWithTag(201) as? UILabel{ 

     sizeLabel.text = room.size 
     println(room.size) 

    } 

    if let vacLabel = cell.viewWithTag(202) as? UILabel{ 

     vacLabel.text = room.vacant 
     println(room.vacant) 

    } 

    if let taskIm = cell.viewWithTag(203) as? UIImageView{ 

     taskIm.image = UIImage(named: room.imagename) 
    } 

    return cell 
} 

Как вы можете видеть, что я поставил в операторах печати отлаживать, и он не печатает ничего. Это потому, что функция не запускается или из-за проблемы с моим кодом?

Если да, можете ли его найти? Все, что я точно знаю, это то, что до функции reloadData() все работает отлично.

+0

Ваших, вашего 'повторного объявления уаг filtered' просто обновить существующий' filtered' – 0yeoj

+0

Ха-ха гениально! Хорошо подмечено! –

ответ

1

Вы повторное объявление Вашего var filtered просто обновить существующую filtered используются внутри ваш cellForRowAtIndexPathindexPath

0

Самая распространенная причина для reloadData, не вызывающая cellForRowAtIndexpath, заключается в том, что вы либо неправильно подключили источник данных, либо не ссылаетесь на правильный tableView.

Убедитесь, что где-то в viewDidLoad у вас есть строка, которая выглядит следующим образом:

self.tView.dataSource = self 

Посмотреть this question для кого-то с подобной проблемой.

Кроме того, вы можете упростить настройку ярлыков на себя путем подкласса UITableViewCell и создания выходов из ваших меток в класс ячеек. Это позволит вам удалить весь танец if let sizeLabel = cell.viewWithTag(201) as? UILabel.

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