我如何“隐藏”一个UIRefreshControl?

有时我的表视图将不会连接到服务刷新,在这种情况下,我不希望UIRefreshControl存在。

在viewDidLoad中添加它之后,我试图在setEnabled:setHidden:某些情况下隐藏它setHidden:但是两者似乎都不起作用。

尝试设置您的表视图控制器的refreshControl属性为零。

尝试这个:

 [self.refreshControl removeFromSuperview]; self.refreshControl = nil; 

你有几种方法来做到这一点。 我认为最好的方法是在viewDidLoad方法中进行检查:

 if (condition){ //attach refreshControl } 

如果这是不可能的最好的办法是把这个代码你想隐藏刷新(我认为在viewWillAppear方法if条件)

 //End refresh control [self.refreshControl endRefreshing]; //Remove refresh control to superview [self.refreshControl removeFromSuperview]; 

有一个非常简单的解决scheme,你可以尝试: [self.refreshControl removeFromSuperview];

你不能使用setEnabled:NO去除UIRefreshControl,所以你必须从它的superview中删除它。我尝试了一个使用Apple提供的Reachability类的示例。

要添加UIRefreshControl,你可以使用这个:

 UIRefreshControl *refContr=[[UIRefreshControl alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; [refContr setTintColor:[UIColor blueColor]]; [refContr setBackgroundColor:[UIColor greenColor]]; [self.view addSubview:refContr]; [refContr setAutoresizingMask:(UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin)]; [refContr addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged]; 

然后实现可达性类的通知:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 

你可以通过使用bool标志来检查连通性,在这里我提供这个例子使用苹果的可达性类来检查我的连接性。

 switch (netStatus) { case NotReachable: { for (UIRefreshControl *subView in [myView subviews]) { if ([subview isKindOfClass:[UIRefreshControl class]]) { [subView removeFromSuperview]; } } //or you could use [UIRefreshControl setHidden:YES]; connectionRequired = YES; break; } case ReachableViaWiFi: { for (UIRefreshControl *subView in [myView subviews]) { if ([subview isKindOfClass:[UIRefreshControl class]]) { [subview removeFromSuperview]; }else{ [self.view addSubview:refContr]; } //or you could use [UIRefreshControl setHidden:NO]; break; } } 

希望这会为你工作。

 [refreshControl setTintColor:[UIColor clearColor]]; 

你也可以做这样的事情:

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y < 0) scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0); } 

我这样解决了它:

 -(void)updateUIWithAuthState:(BOOL)isAuthenticated { self.loginButton.enabled = !isAuthenticated; self.loginButton.tintColor = isAuthenticated ? [UIColor clearColor] : nil; self.logoutButton.enabled = isAuthenticated; self.logoutButton.tintColor = isAuthenticated ? nil : [UIColor clearColor]; self.tableView.userInteractionEnabled = isAuthenticated; self.data = nil; [self.tableView reloadData]; } 

下面是最好的实现UIRefreshControl。

  -(void)addRefreshControll{ self.refreshControl=[[UIRefreshControl alloc] init]; self.refreshControl.tintColor=[UIColor colorWithRed:0 green:183.0/255.0 blue:213/255.0 alpha:1.0]; self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Loading history..."]; [self.refreshControl addTarget:self action:@selector(loadMoreChatFromCoreData) forControlEvents:UIControlEventValueChanged]; self.tableView.refreshControl = self.refreshControl; } 

当没有更多的logging要加载然后删除refreshControl由下面的行

 self.tableView.refreshControl = nil; 

我已经实施了相同的工作正常。