偶尔我的表视图将不会连接到要刷新的服务,在这种情况下,我不希望UIRefreshControl存在。
在viewDidLoad中添加它后,我尝试在某些情况下使用setEnabled:
和setHidden:
隐藏它,但似乎都不起作用。
尝试将表视图控制器的refreshControl
属性设置为nil。
我这样解决了:
-(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;
}
当没有更多要加载的记录时,请通过下面的行删除refreshControl
self.tableView.refreshControl = nil;
我已经实施了同样的工作。
我通过在刷新函数中调用"yourRefreshControl".endEditing()
解决了这个问题。
试试这个:
[self.refreshControl removeFromSuperview];
self.refreshControl = nil;
你有几种方法可以做到这一点。我认为最好的方法是使用以下方法检查viewDidLoad方法:
if (condition){
//attach refreshControl
}
如果这是不可能的,最好的方法是把这个代码放在你要隐藏刷新的地方(我认为在if条件下的viewWillAppear方法)
//End refresh control
[self.refreshControl endRefreshing];
//Remove refresh control to superview
[self.refreshControl removeFromSuperview];
你可以尝试一个非常简单的解决方案:[self.refreshControl removeFromSuperview];
我设置tableView.refreshConrol = nil
时遇到了不好的经验,因为当我把它设置回旧的refreshControl
时,它只在一秒钟内启动动画,所以它看起来不太好,所以当我需要禁用refreshControl
时我使用:
tableView.refreshControl?.endRefreshing()
tableView.refreshControl?.alpha = 0
当我需要它时,我使用:
tableView.refreshControl?.alpha = 1
// and if I need to show refreshing indicator immediately I write:
tableView.refreshControl?.beginRefreshing()
附:设置isHidden, isEnabled, isUserInteractionEnabled
没有帮助
你不能使用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标志来检查连接,这里我提供此示例使用apple的可访问性类来检查我的连接。
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;
}
}
希望这对你有用。
隐藏刷新控制并避免警告只需使用
目标C.
[self.refreshControl removeFromSuperview];
迅速
self.refreshControl.removeFromSuperview()
一个老问题,但我正在寻找一个答案,没有任何工作完全像我想要的。
这对我有用:
斯威夫特4
func createRefreshControl() {
refreshControl = UIRefreshControl()
refreshControl?.addTarget(self, action: #selector(self.myTableRefreshFunction), for: UIControlEvents.valueChanged)
refreshControl?.tintColor = UIColor.white
refreshControl?.endRefreshing()
}
func removeRefreshControl() {
refreshControl?.removeTarget(self, action: #selector(self.myTableRefreshFunction), for: UIControlEvents.valueChanged)
refreshControl = nil
}
我希望创建控件时调用createRefreshControl(),当我想删除它时调用removeRefreshControl。
我不得不删除我最初添加到刷新控件的相同目标,否则它会在实际删除之前刷新一次。
[refreshControl setTintColor:[UIColor clearColor]];
你也可以这样做:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0)
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}