<dl id='7alhe'></dl>

  1. <tr id='7alhe'><strong id='7alhe'></strong><small id='7alhe'></small><button id='7alhe'></button><li id='7alhe'><noscript id='7alhe'><big id='7alhe'></big><dt id='7alhe'></dt></noscript></li></tr><ol id='7alhe'><table id='7alhe'><blockquote id='7alhe'><tbody id='7alhe'></tbody></blockquote></table></ol><u id='7alhe'></u><kbd id='7alhe'><kbd id='7alhe'></kbd></kbd>
  2. <ins id='7alhe'></ins>
      <i id='7alhe'></i>
        <i id='7alhe'><div id='7alhe'><ins id='7alhe'></ins></div></i>

        <acronym id='7alhe'><em id='7alhe'></em><td id='7alhe'><div id='7alhe'></div></td></acronym><address id='7alhe'><big id='7alhe'><big id='7alhe'></big><legend id='7alhe'></legend></big></address><fieldset id='7alhe'></fieldset>

      1. <span id='7alhe'></span>

        <code id='7alhe'><strong id='7alhe'></strong></code>
        1. iOS开发之UIRefreshControl使用踩坑

          • 时间:
          • 浏览:5
          • 来源:124软件资讯网

            问题形貌

            接上一个话题:iOS开发之TabBar再次点击实现刷新 ,实现了TabBar的点击刷新以后  ,最先继续写完乐成能 ,刷新UITableView  ,于是思量到iOS 10以后 ,UIScrollView已经有UIRefreshControl的属性了  ,爽性用自带的写 。于是就有了如下的代码:

            1. 添加UIRefreshControl到UITableView上去

            UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
                
            refreshControl.tintColor = [UIColor grayColor];
                
            refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新"];
                
            [refreshControl addTarget:self action:@selector(refreshTabView) forControlEvents:UIControlEventValueChanged];
            self.newsTableView.refreshControl = refreshControl;

            2. 下拉刷新事务

            -(void)refreshTabView
            {
                //添加一条数据
                [self.newsData insertObject:[self.newsData firstObject] atIndex:0];
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    
                    [self.newsTableView reloadData];
                    
                    if ([self.newsTableView.refreshControl isRefreshing]) {
                        
                        [self.newsTableView.refreshControl endRefreshing];
                    }
                });
            }

            3. TabBar点击事务

            -(void)doubleClickTab:(NSNotification *)notification{
                
                //这里有个坑 就是直接用NSInteger吸收会有问题 数字差池
                //由于上个界面传过来的时间封装成了工具 ,以是用NSNumber吸收后再取值
                NSNumber *index = notification.object;
                
                if ([index intValue] == 1) {
                    //刷新
                    [self.newsTableView.refreshControl beginRefreshing];
                    
                }
                
            }

            此时的效果如下  ,直接下拉刷新可以  ,可是点击TabBar不行以:

            刷新异常情形.gif

            剖析问题

            经由Google资助 ,终于知道缘故原由  ,由于系统自带的UIRefreshControl有两个陷阱:

            1. 挪用-beginRefreshing要领不会触发UIControlEventValueChanged事务;

            2. 挪用-beginRefreshing要领不会自动显示进度圈 。

            也就是说  ,只是挪用-beginRefreshing要领是不管用的  ,那么对应的需要做两件事:

            1. 手动设置UIRefreshControl的事务;

            2. 手动设置UITableView的ContentOffset  ,露出进度圈  。

            解决问题

            只需要修改上面第3步中的代码如下:

            -(void)doubleClickTab:(NSNotification *)notification{
                //这里有个坑 就是直接用NSInteger吸收会有问题 数字差池
                //由于上个界面传过来的时间封装成了工具  ,以是用NSNumber吸收后再取值
                NSNumber *index = notification.object;
                
                if ([index intValue] == 1) {
                    //刷新
                    //animated不要为YES ,否则菊花会卡死
                    [self.newsTableView setContentOffset:CGPointMake(0, self.newsTableView.contentOffset.y - self.newsTableView.refreshControl.frame.size.height) animated:NO];
                    
                    [self.newsTableView.refreshControl beginRefreshing];
                    
                    [self.newsTableView.refreshControl sendActionsForControlEvents:UIControlEventValueChanged];
                }
                
            }

            最终效果:

            刷新正常情形.gif