2014-09-27 4 views
4

Я создал свой UITableView экземпляр программно и добавил его в корневой вид в виде подвид. Я также задал делегат и dataSource для экземпляра представления таблицы программно. Поэтому в этом представлении таблицы нет контроллера табличного представления. Теперь я хочу, чтобы представление таблицы было доступно для обновления. Я узнал код от Google, например, так:refreshControl с программным UITableView без UITableViewController

var refresh = UIRefreshControl(); 
refresh.attributedTitle = NSAttributedString(string: "Pull to refresh"); 
refresh.addTarget(self, action: "refresh", forControlEvents:.ValueChanged); 
self.refreshControl = refresh; 

Теперь вопрос является self относится к контроллеру табличного. Однако в этом контексте у меня нет контроллера табличного представления. Так что я должен создать контроллер табличного представления только для того, чтобы реализовать функцию pull down to refresh?

ответ

8

Вы можете сделать это следующим образом:

// 1: Добавьте переменную экземпляра к вашему ViewController.

let refreshControl = UIRefreshControl()

// 2: В viewDidLoad() настроить контроль обновления

refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") 
refreshControl.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged) 

// 3: И (еще в viewDidLoad()) добавить его в качестве подвида к Tableview (UITableView)

tableView.addSubview(refreshControl) 

// 4: Наконец, функция в вашем обновления(): не забудьте положить конец освежать этого элемента управления.

refreshControl.endRefreshing() 

// Имейте в виде, это (конца освежающего) должен быть сделан на главную очереди! - Если вас там нет. В таком случае вы можете использовать что-то вроде:

dispatch_async(dispatch_get_main_queue()) { 
    self.tableView.reloadData() 
    self.refreshControl.endRefreshing() 
} 

Примечания к вашей коде:

  1. Вам не нужно больше использовать точку с запятой :-).

  2. Регулятор обновления и селектор управления обновлением не могут иметь то же имя (то есть действие: «обновить»).

  3. Нет «self.refreshControl = refresh;».

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