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

时间:2014-03-24 23:16:17

标签: iphone objective-c uitableview ios7 uirefreshcontrol

我在其中一个标签上有以下内容:

- (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://stackoverflow.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];
    }
}

当拉下桌子时,刷新控制开始正常旋转。

但是,当我旋转,很快显示另一个标签然后返回时,刷新控制停止旋转。

知道为什么吗?

2 个答案:

答案 0 :(得分:4)

尝试将这段代码从viewDidLoad移至viewWillAppear

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

答案 1 :(得分:1)

解决此问题的更明智的方法是分别在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()
    }
}