UIRefreshControl没有显示指标或标题?

时间:2014-02-17 06:39:03

标签: ios objective-c ios7 uitabbarcontroller pull-to-refresh

我想使用UITableViewController向我的UIRefreshControl实施拉动刷新。这是我到目前为止所尝试的。

 - (void)viewDidLoad
    {
     .....
     ////********* Pull to refresh ************/
        UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
        refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
        refresh.tintColor = [UIColor magentaColor];
     //   [self.tableView addSubview:refresh];
// [self.refreshControl setEnabled:YES];
        [refresh addTarget:self action:@selector(pullToRefresh:) forControlEvents:UIControlEventValueChanged];
        self.refreshControl = refresh;

    }
    -(void)pullToRefresh:(UIRefreshControl *)refresh {
         [refresh beginRefreshing];
        refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing.."];
        [self loadRecentActivities];
    }

但是当我拉出tableview时,活动指示器和标题都不可见,但是pullToRefresh被调用并且表格刷新。我的应用程序支持 iOS7.0 + 。 我错过了什么?任何帮助将不胜感激?

修改:我在编辑后的代码中提到[self.refreshControl setEnabled:YES];[self.refreshControl setEnabled:YES];,但仍然没有运气。 当我将其拉到刷新时,这就是我的tableview的样子 - enter image description here

最终解决方案:对于我正在使用的表视图背景

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
self.tableView.backgroundView = imageView;

刷新指示符和标题隐藏在self.tableView.backgroundView后面,而不是

[self.tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

它解决了我的问题。还有很多感谢 Balram Tiwari ,如果你还有问题请看他的答案。

2 个答案:

答案 0 :(得分:11)

只需在refreshControl的初始化代码下添加self.tableView.backgroundView.layer.zPosition -= 1;

答案 1 :(得分:7)

实际上你在tableView中有刷新控制器,但它在navigationBar后面。 (听起来不一样,对吧),这是捕获,

当您在iOS7中使用代码时,默认情况下UIViewController会占用(edgesForExtendedLayout)整个屏幕。这意味着你的(0,0)将从导航栏下方的左上角开始。

所以你的tableView实际上是从那里开始的。因此,要摆脱它,只需在edgesForExtendedLayout方法中为viewController指定viewDidLoad

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

之后它应该是可见的。

  • 上述修复:

Before Fix

  • 修复后。

After the Fix

希望有所帮助。