UIRfreshControl не работает при программном вызове

У меня есть UIRefreshControl в моем ViewController и метод refreshView для обработки события "pull to Refresh". Он отлично работает при извлечении, но когда я вызываю [refresh beginRefreshing] в коде, он просто показывает анимацию обновления, но не вызывает метод refreshView.

Вот код для инициализации управления обновлением в viewDidload:

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self
            action:@selector(refreshView:)
  forControlEvents:UIControlEventValueChanged];
self.refreshControl = refresh;

person Yury Pogrebnyak    schedule 23.05.2013    source источник


Ответы (3)


На основании моего понимания документации: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html

Сообщает элементу управления, что операция обновления была запущена программно. ... Вызывайте этот метод, когда внешний источник событий запускает программное обновление вашей таблицы.

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

Поэтому вам следует вызвать метод refreshView: самостоятельно.

person Valent Richie    schedule 23.05.2013

Просто вызовите beginRefreshing асинхронно.

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view.

   dispatch_async(dispatch_get_main_queue(), ^{
       [refreshControl beginRefreshing];
   });
   //...
}
person Bilal    schedule 21.11.2016

Попробуй это

ViewDidLoad

//initialise the refresh controller
refreshControl = [[UIRefreshControl alloc] init];
//set the title for pull request
refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"pull to Refresh"];
//call he refresh function
[refreshControl addTarget:self action:@selector(refreshMyTableView)
         forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;

Метод

-(void)refreshMyTableView{

    //set the title while refreshing
    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Refreshing the TableView"];
    //set the date and time of refreshing
    NSDateFormatter *formattedDate = [[NSDateFormatter alloc]init];
    [formattedDate setDateFormat:@"MMM d, h:mm a"];
    NSString *lastupdated = [NSString stringWithFormat:@"Last Updated on %@",[formattedDate stringFromDate:[NSDate date]]];
    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:lastupdated];
    //end the refreshing

}

остановить это

[refreshControl endRefreshing];
person IamGretar    schedule 23.05.2013
comment
Ваш viewDidLoad код не отличается от моего. Метод refreshMyTableView по-прежнему не будет вызываться для [refresh beginRefreshing]. - person Yury Pogrebnyak; 23.05.2013
comment
Попробуйте удалить ':' в конце action:@selector(refreshView:) - person IamGretar; 23.05.2013