我想使用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的样子 -
最终解决方案:对于我正在使用的表视图背景
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 ,如果你还有问题请看他的答案。
答案 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;
之后它应该是可见的。
希望有所帮助。