我如何“隐藏”一个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;
我已经实施了相同的工作正常。