Подтвердить что ты не робот

Pull To Refresh в iOS 7

Я пытаюсь получить функцию обновления, чтобы нормально работать на iOS 7 в моем представлении таблицы. В viewDidLoad у меня есть:

self.refreshControl = [[UIRefreshControl alloc] init];

    [self.refreshControl addTarget:self action:@selector(refreshInvoked:forState:) forControlEvents:UIControlEventValueChanged];

Затем я запускаю:

-(void) refreshInvoked:(id)sender forState:(UIControlState)state {
    // Refresh table here...
    [_allEntries removeAllObjects];
    [self.tableView reloadData];
    [self refresh];
}

Когда запрос, вызванный вызовом метода refresh, выполняется в коде didCompleteRequest, я:

[self.refreshControl endRefreshing];

В iOS 6 это означало бы, что, когда вы потянете вниз на вид таблицы, он покажет круговую стрелу, которая будет растянута, когда вы потянете, и после того, как она вытянется достаточно далеко, она будет обновляться. Прямо сейчас, я не вижу круговой стрелки, просто идентификатор UIActivityIndicator. Это также иногда будет работать, а иногда и не будет. Что мне не хватает?

4b9b3361

Ответ 1

"UIActivityIndicator", о котором вы говорите, - это новый внешний вид UIRefreshControl.

Вы снижаетесь, и по мере того, как круг завершается, он показывает, насколько близко вы запускаете обновление.

Ответ 2

Чтобы добавить UIRefreshControl в свой UITableView...

1) в ViewDidLoad..

- (void)viewDidLoad
{
    [super viewDidLoad];

    //to add the UIRefreshControl to UIView
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Please Wait..."]; //to give the attributedTitle
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [tblVideoView addSubview:refreshControl];
}

2) связать связанный с ним метод обновления данных UITableView...

- (void)refresh:(UIRefreshControl *)refreshControl
{
    [self refreshTableData]; //call function you want
    [refreshControl endRefreshing];
}

ИЛИ для Swift

 let refreshControl : UIRefreshControl = UIRefreshControl.init()
 refreshControl.attributedTitle = NSAttributedString.init(string: "Please Wait...")
 refreshControl.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
 feedTable.addSubview(refreshControl)

 func refresh(refreshControl:UIRefreshControl){
      self.refreshTableData()//call function you want
      refreshControl.endRefreshing()
 }

Ответ 3

Вы можете удалить/скрыть индикатор активности по умолчанию и добавить свои собственные изображения и анимации.

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

Здесь наш учебник по настройке Custom Pull to Refresh (в objective-c и swift): http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

Надеюсь, что это поможет, дайте мне знать, могу ли я ответить на что-либо еще

Ответ 4

Обновление для быстрого

Для TableView

 - (void)viewDidLoad
 {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Please  Wait..")
    tableView.addSubview(refreshControl)
    refreshControl.addTarget(self, action: #selector(refreshTable), forControlEvents: UIControlEventValueChanged)
 }

- (void)refreshTable {
    //Refresh Data here
    //......
    //Once all the data is fetched. If you are loading asynchronously add the below code inside the async block
    refreshControl.endRefreshing()
    [tableView reloadData];
 }

Для UITableViewController

В UITableViewController есть свойство по умолчанию refreshControl, которое по умолчанию равно nil. Если вы хотите просто инициализировать refreshControl и назначить его.

let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Please Wait..")
yourTableViewController.refreshControl = refreshControl