14

我正在尝试让下拉刷新功能在我的表视图中的 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 上,这意味着当你下拉 table view 时,它会显示一个圆形箭头,当你拉动时会被拉长,拉得足够远后,它会刷新。不过,现在我看不到圆形箭头,只有一个 UIActivityIndi​​cator。它有时也会起作用,有时不会。我错过了什么?

4

4 回答 4

21

在你的 UITableView 中添加 UIRefreshControl...

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];
}

或者对于斯威夫特

 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()
 }
于 2014-12-09T05:17:45.943 回答
10

您正在谈论的“UIActivityIndi​​cator”是 UIRefreshControl 的新默认外观。

你往下拉,当圆圈完成时,它显示你离触发刷新有多近。

于 2013-11-11T19:01:44.680 回答
2

您可以删除/隐藏默认活动指示器,并添加您自己的图像和动画。

还有一个特定的阈值(距离),在调用刷新之前必须将表拉过去。

这是我们的自定义拉到刷新控件的教程(在objective-c和swift中):http ://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

希望对你有帮助,如果我能回答其他问题,请告诉我

于 2015-02-27T14:55:47.510 回答
1

快速更新

对于表视图

 - (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
于 2016-04-22T06:45:26.233 回答