2015-08-31 2 views
4

У меня есть tableView с пользовательской ячейкой.Перезагрузка данных таблицы из пользовательской ячейки

У меня также есть .swift-файл для этой ячейки custrom.

В этом файле у меня есть функция, которая не имеет отправителя: AnyObject при вводе параметров.

Как я могу вызвать tableView.reloadData() из этой функции?

+0

Действительно ли вы ищете ячейку для перезагрузки всей таблицы или просто хотите перерисовать ячейку? –

ответ

9

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

Итак, идея, которую я предлагаю, - создать функцию, которая будет реализована в вашем UITableViewController (или UIViewController, соответствующем к протоколу UITableViewDelegate)

Сначала попробуйте добавить протокол поверх своего файла CustomCell.swift.

protocol CustomCellUpdater: class { // the name of the protocol you can put any 
    func updateTableView() 
} 

затем внутри CustomCell.swift:

weak var delegate: CustomCellUpdater? 

func yourFunctionWhichDoesNotHaveASender() { 
    ... 
    delegate?.updateTableView() 
} 

после этого в вашем UITableViewController (или эквивалент)

func updateTableView() { 
    tableView.reloadData() // you do have an outlet of tableView I assume 
} 

Наконец сделать ваш UITableview класс соответствовать протоколу CustomCellUpdater

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "yourIdentifier", for: indexPath) as! YourTableViewCell 
    cell.delegate = self 
} 

В теории это должно сработать. Дайте мне знать, если мне что-то не хватает

+0

как я могу сделать «Наконец, чтобы ваш класс UITableview соответствовал протоколу CustomCellUpdater»? :) – SwiftStudier

+0

класс YourUITableViewController: UITableViewController, CustomCellUpdater {... ..... } – IamMashed

+0

это жаль, но ничего не случилось – SwiftStudier

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