Obj-C - 添加活动指示器以下拉刷新?

Posted

技术标签:

【中文标题】Obj-C - 添加活动指示器以下拉刷新?【英文标题】:Obj-C - Add activity indicator to pull down to refresh? 【发布时间】:2020-08-28 15:28:06 【问题描述】:

我在 ViewController 中的 TableView 中添加了“下拉刷新”功能。数据刷新完美,但我想知道如何在执行刷新时将经典活动指示器添加到顶部?

ViewController.m

- (void)viewDidLoad 
    [super viewDidLoad];
    
 [_refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
 //[self.mytable addSubview:refreshControl];
 UITableViewController *tableViewController = [[UITableViewController alloc] init];
 tableViewController.tableView = self.tableView;
 tableViewController.refreshControl = _refreshControl;




-(void)refreshData


   UITableViewController *tableViewController = [[UITableViewController alloc] init];
   tableViewController.tableView = self.tableView;
    [self.tableView reloadData];
   [tableViewController.refreshControl endRefreshing];
    
  

【问题讨论】:

大家可以在这里找到快速版本的刷新控制cocoacasts.com/… 【参考方案1】:

问题似乎在于viewDidLoadrefreshData 都在创建新的tableViewControllers,但他们应该更新您现有的。

如果ViewController.m 中的类是UITableViewController 的子类,则可以更新代码以使用当前视图控制器。

- (void)viewDidLoad 
    [super viewDidLoad];
    
    [_refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = _refreshControl;



-(void)refreshData

    [self.tableView reloadData];
    [self.refreshControl endRefreshing]; 

另一个问题是refreshData 立即调用endRefreshing,因此刷新控制器在结束之前没有任何时间可见。通常你会运行一个异步任务,比如网络请求,然后在完成后调用endRefreshing。要伪造它,您可以延迟致电endRefreshing 使用以下内容。

-(void)refreshData

    // Wait 1 sec before ending refreshing for testing
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^
        [self.tableView reloadData];
        [self.refreshControl endRefreshing];
    );

【讨论】:

大家可以在这里找到快速版本的刷新控制cocoacasts.com/… 刷新开始时,我仍然没有显示活动指示器?【参考方案2】:

这就是最终的工作!

ViewController.h

@property (nonatomic, strong) UIRefreshControl *refreshControl;

ViewController.m

 - (void)viewDidLoad 
            [super viewDidLoad];
     
            self.refreshControl = [[UIRefreshControl alloc] init];
            self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull To Refresh"];
            [self.refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
            [self.tableView addSubview:self.refreshControl];
            
        
    
    -(void)refreshData
    
        
      
        // Wait 1 sec before ending refreshing for testing
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^
            [self.tableView reloadData];
            [self.refreshControl endRefreshing];
        );
    

【讨论】:

以上是关于Obj-C - 添加活动指示器以下拉刷新?的主要内容,如果未能解决你的问题,请参考以下文章

在状态栏中隐藏活动指示器[重复]

上拉更新,下拉刷新

Android——Xlistview上拉刷新下拉加载

iOS常用刷新控件(下拉、上拉)详解

封装RecyclerViewAdapter实现RecyclerView下拉刷新上拉载入很多其它

今天终于学会了下拉刷新,上拉刷新