【问题标题】:UIRefreshControl - Pull To Refresh in iOS 7 [duplicate]UIRefreshControl - 在 iOS 7 中拉动刷新 [重复]
【发布时间】:2014-03-30 08:25:09
【问题描述】:

我正在尝试在我的表视图中获取 iOS 7 上的拉动刷新功能。在我的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];

然后我运行:

-(void)refreshTable {
    [self.mytableView reloadData];
    [refreshControl endRefreshing];
}

在 iOS 6 上,这意味着当你在 table view 上下拉时,它会显示一个圆形箭头,当你拉动时会被拉长,拉得足够远后,它会刷新。现在,我没有看到圆形箭头。我错过了什么?

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    您不必显式设置框架或启动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];
        }
    }
    

    在您的refreshTable 函数中,您需要在完成数据刷新后停止它。下面是它的外观:

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

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

    【讨论】:

    • 成功了,谢谢;
    • 它是否适用于集合视图?我的印象是刷新控制只适用于 UITableView
    • @rounak - 是的,UICollectionView 也很有魅力,我目前正在我的一个项目中使用它。
    • @Johnykutty 'refreshControl' 是内置的综合属性。你可以给它设置实例化的 UIRefreshControl,而不需要“addSubview”它。
    • UIRefreshControl 应该适用于任何 UIScrollView 派生类;所以 UICollectionView 和 UITableView 一样好!
    【解决方案2】:

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

    将您的 viewDidLoad 更改为

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

    附:您的视图控制器应该是UITableViewController 的子类。

    【讨论】:

    • False,你的视图控制器不需要是UITableViewController的子类,你只需要一个tableView作为你的UIViewController的属性并实现<UITableViewDataSource>
    • @aramusss refreshControlUITableViewController 上的属性,而不是 UITableView 上的属性。 developer.apple.com/library/prerelease/ios/documentation/UIKit/…你能否链接到一些你所说的可能的文档(或示例)。
    • 你是对的,但正如我所说,它只是在没有 UITableViewController 的情况下工作。你可以在这里找到其他人的例子:stackoverflow.com/questions/12497940/…
    • aramuss 是正确的。你不需要 UITableViewController。你只需要一个 UITableView。我找不到这方面的文档,但已经做了很多次了。
    • UITableViewrefreshControl 属性仅在 iOS10 上可用。在 iOS 9 中它只存在于 UITableViewController
    猜你喜欢
    • 2013-03-18
    • 2013-11-23
    • 2022-06-15
    • 2020-05-20
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多