UIRefreshControl - iOS 7中的Pull to Refresh

Niv*_*666 43 objective-c uitableview ios

我正试图在我的表视图中获得iOS 7上的pull to refresh功能.在我viewDidLoad,我有:

refreshControl = [[UIRefreshControl alloc] init];
[self.mytableView setContentOffset:CGPointMake(0, refreshControl.frame.size.height) animated:YES];
[refreshControl beginRefreshing];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

然后我跑:

-(void)refreshTable {
    [self.mytableView reloadData];
    [refreshControl endRefreshing];
}
Run Code Online (Sandbox Code Playgroud)

在iOS 6上,这意味着当你向下拉动表格视图时,它会显示在你拉动时伸展的圆形箭头,并且在拉得足够远之后,它会刷新.现在,我看不到圆形箭头.我错过了什么?

Yas*_* T. 169

您不必显式设置框架或启动UIRefreshControl.如果它是一个 UITableViewUICollectionView它,它应该像一个魅力本身.你确实需要阻止它.

以下是您的代码应如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];
    refreshControl = [[UIRefreshControl alloc]init];
    [refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];

    if (@available(iOS 10.0, *)) {
        self.mytableView.refreshControl = refreshControl;
    } else {
        [self.mytableView addSubview:refreshControl];
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的refreshTable功能中,您需要在刷新数据后停止它.以下是它的样子:

- (void)refreshTable {
    //TODO: refresh your data
    [refreshControl endRefreshing];
    [self.mytableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果要异步刷新数据,则需要移动endRefreshingreloadData调用完成处理程序.

  • @Johnykutty'chreshControl'是内置的合成属性.您可以将实例化的UIRefreshControl设置为它,而不需要"addSubview"它. (6认同)
  • 它工作的人,谢谢; (2认同)

Ayu*_*oel 8

您忘记将附加UIRefreshControl到表格视图中.

改变你viewDidLoad

  refreshControl = [[UIRefreshControl alloc]init];
  [refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
  [self setRefreshControl:refreshControl];
Run Code Online (Sandbox Code Playgroud)

PS您的视图控制器应该是子类UITableViewController.

  • 错误,您的视图控制器不需要是`UITableViewController`的子类,您只需要一个tableView作为您的`UIViewController`的属性并实现`<UITableViewDataSource>` (2认同)
  • `UITableView`的`refreshControl`属性仅在iOS10上可用.在iOS 9中,它只在`UITableViewController`中 (2认同)