2013-11-11 4 views
13

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

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. Это также иногда будет работать, а иногда и не будет. Что мне не хватает?

+0

Просто activityindicator является появление по умолчанию UIRefreshControl в прошивке 7. Кроме этого, отсутствует код: [self.myTableView addSubview: refreshControl]; –

+0

Я не вижу, какая разница в приложении.Пробовал и без '[self.tableView addSubview: self.refreshControl];' и ничего не видел. @Nikos M. – user717452

+0

Подробный ответ: http://stackoverflow.com/questions/22059510/uirefreshcontrol-pull-to-refresh-in-ios-7/22060573#22060573 –

ответ

9

«UIActivityIndicator», о котором вы говорите, является новым по умолчанию элементом UIRefreshControl.

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

+0

Спасибо, поэтому больше ничего не нужно с точки зрения код, который я опубликовал? (Я понимаю, что я не использовал фактический метод обновления, который я создал для заполнения таблицы). – user717452

+0

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

+1

Не могли бы вы рассказать мне, как мы можем удалить его рывок или небольшую задержку, когда мы его выпустим? – Itesh

20

Чтобы добавить 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() 
} 
2

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

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

Вот наш учебник для Пользовательского оттягивается Обновить управление (в Objective-C и быстр): http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

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

1

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

Для 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