Ответ 1
"UIActivityIndicator", о котором вы говорите, - это новый внешний вид UIRefreshControl.
Вы снижаетесь, и по мере того, как круг завершается, он показывает, насколько близко вы запускаете обновление.
Я пытаюсь получить функцию обновления, чтобы нормально работать на 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. Это также иногда будет работать, а иногда и не будет. Что мне не хватает?
"UIActivityIndicator", о котором вы говорите, - это новый внешний вид UIRefreshControl.
Вы снижаетесь, и по мере того, как круг завершается, он показывает, насколько близко вы запускаете обновление.
Чтобы добавить 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()
}
Вы можете удалить/скрыть индикатор активности по умолчанию и добавить свои собственные изображения и анимации.
Также существует определенное пороговое значение (расстояние), которое должна быть вытащена таблицей до того, как будет вызвано обновление.
Здесь наш учебник по настройке Custom Pull to Refresh (в objective-c и swift): http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/
Надеюсь, что это поможет, дайте мне знать, могу ли я ответить на что-либо еще
Обновление для быстрого
Для 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