UIRefreshControl без UITableViewController, не вызывающий селектор

У меня есть UIViewController с UITableView в качестве подвида. Я пытаюсь добавить обновление на стол.

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

Я не могу использовать UITableViewController в качестве основного контроллера, так как мне нужно добавить фиксированную кнопку внизу экрана.

У меня такое чувство, что я упускаю что-то, что, надеюсь, очевидно для кого-то другого.

@interface ActivityViewController ()<UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate>
@end



- (void)viewDidLoad{

    [super viewDidLoad];

    _myTableView.delegate = self;

    _myTableView.dataSource = self;

    _tableViewController = [UITableViewController new];

    _tableViewController.tableView = _myTableView;

    [self addChildViewController:_tableViewController]; // Not sure this is necessary

    _refreshControl = [UIRefreshControl new];

    [_refreshControl addTarget:self action:@selector(loadMoreData) forControlEvents:UIControlEventValueChanged];

    _tableViewController.refreshControl = _refreshControl;

}

- (void)loadMoreData{

    NSLog(@"loadMoreData");
}

person Alan    schedule 26.11.2013    source источник


Ответы (2)


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

// Refresh control
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.myTableView;

self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(loadMoreData) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;
person Alan    schedule 28.11.2013

Вы должны создать экземпляр вашего tableviewcontroller с помощью

[UITableViewController alloc] initWithStyle:(UITableViewStyle)

использование new выполняет инициализацию alloc, но вы должны использовать назначенный инициализатор

person Nicolas Manzini    schedule 26.11.2013
comment
Это не помогло, и на самом деле тогда я UIRefreshController вообще не показывал. Ссылка, которую я добавил выше в свой исходный пост, содержит подробное обсуждение, объясняющее, почему это нужно делать так, как я это сделал. Просто мой селектор игнорируется.... - person Alan; 26.11.2013
comment
Хорошо, я изменил это, но мой селектор - (void)loadMoreData не вызывается. - person Alan; 26.11.2013
comment
я не знаю. возможно, попробуйте сделать свой контроллер обновления переменной экземпляра и/или проверить, является ли он нулевым в какой-то момент, и вам не нужно [self addChildViewController:_tableViewController]; // Не уверен, что это необходимо - person Nicolas Manzini; 26.11.2013
comment
Да, я совсем застрял с этой проблемой. Пробовал много разных сортов, но может вызвать селектор. Вроде чувствую, что упускаю что-то глупое. - person Alan; 26.11.2013