临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)

Posted

技术标签:

【中文标题】临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)【英文标题】:UIRefreshControl freezes when temporarily showing other tab (iOS 7) 【发布时间】:2014-03-24 23:16:16 【问题描述】:

我的一个标签上有以下内容:

- (void)viewDidLoad

    [super viewDidLoad];

    self.clearsSelectionOnViewWillAppear = YES;

    UIRefreshControl* refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.attributedTitle   = [[NSAttributedString alloc] initWithString:@"Sync"];
    [refreshControl addTarget:self 
                       action:@selector(refresh:) 
             forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

    //### Workaround: http://***.com/a/19126113/1971013
    dispatch_async(dispatch_get_main_queue(), ^
    
        [self.refreshControl beginRefreshing];
        [self.refreshControl endRefreshing];
    );


- (void)refresh:(id)sender

    if ([Settings sharedSettings].haveAccount == YES)
    
        [[DataManager sharedManager] synchronizeWithServer:^(NSError* error)
        
            [sender endRefreshing];
        ];
    
    else
    
        [sender endRefreshing];
    

下拉表时刷新控件开始正常旋转。

但是,当我在它旋转时显示另一个选项卡然后返回时,刷新控件停止旋转。

知道为什么吗?

【问题讨论】:

【参考方案1】:

尝试将这段代码从viewDidLoad 移动到viewWillAppear

//### Workaround: http://***.com/a/19126113/1971013
dispatch_async(dispatch_get_main_queue(), ^

    [self.refreshControl beginRefreshing];
    [self.refreshControl endRefreshing];
);

【讨论】:

好主意!让我帮你得到比我更多的分数 :-) 谢谢! 这实际上是错误的。如果尚未收到 API 调用成功怎么办?如果您足够快地切换选项卡,您可以观察到刷新控件在调用成功块之前结束刷新。这会导致最终用户的误解。【参考方案2】:

解决此问题的更明智的方法是分别在 viewWillDisappear / viewWillAppear 上结束/开始刷新

override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(animated)
    refreshControl.endRefreshing()


override func viewWillAppear(_ animated: Bool) 

    super.viewWillAppear(animated)

    if isLoadingData 
        // for simplicity using harcoded height for refresh control
        tableView.setContentOffset(CGPoint(x: 0, y: -60), animated: false)
        refreshControl.beginRefreshing()
    

【讨论】:

以上是关于临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI 的 TabbedView 切换到其他选项卡时查看内容不显示

如何使 jQuery UI 选项卡在激活选项卡时执行“显示:flex”而不是“显示:阻止”?

当我单击“AboSee”选项卡时,它会打开选​​项卡,但不显示选项卡栏

单击选项卡时,我想显示两个片段

如何在本机反应中移动到其他选项卡时暂停视频

单击选项卡时,选项卡栏控制器不显示 XIB UIViewController