Потяните, чтобы обновить в 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];
}

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

[self.refreshControl endRefreshing];

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


person user717452    schedule 11.11.2013    source источник
comment
Просто индикатор активности — это внешний вид UIRefreshControl по умолчанию в iOS 7. Также он отсутствует в вашем коде: [self.myTableView addSubview:refreshControl];   -  person Nikos M.    schedule 11.11.2013
comment
Не вижу разницы в приложении. Пробовал с [self.tableView addSubview:self.refreshControl]; и без, ничего не изменилось. @Никос М.   -  person user717452    schedule 11.11.2013
comment
Более подробный ответ: stackoverflow.com/questions/22059510/   -  person Yas Tabasam    schedule 11.06.2014


Ответы (4)


«UIActivityIndicator», о котором вы говорите, — это новый внешний вид UIRfreshControl по умолчанию.

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

person Infinity James    schedule 11.11.2013
comment
Спасибо, так что больше ничего не нужно с точки зрения кода, который я разместил? (Я понимаю, что упустил фактический метод обновления, который я создал для заполнения таблицы). - person user717452; 11.11.2013
comment
Нет, ты можешь идти. Вы можете изменить его цвет, но, к сожалению, нет возможности вернуться к старому стилю, похожему на пугало. - person Infinity James; 11.11.2013
comment
Подскажите, пожалуйста, как убрать рывок или небольшую задержку при отпускании? - person Itesh; 21.01.2014

Чтобы добавить UIRfreshControl в ваш 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()
 }
person Hardik Thakkar    schedule 09.12.2014

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

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

Вот наше руководство по настраиваемым элементам управления Pull to Refresh (в Objective-C и Swift): http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

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

person Anthony Blatner    schedule 27.02.2015

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

Для просмотра таблиц

 - (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, которое по умолчанию равно нулю. Если вы хотите, просто инициализируйте refreshControl и назначьте его.

let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Please Wait..")
yourTableViewController.refreshControl = refreshControl
person ipraba    schedule 22.04.2016