如何“隐藏”UIRefreshControl?

问题描述 投票:29回答:12

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

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

ios objective-c uirefreshcontrol
12个回答
36
投票

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


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];
}

0
投票

最好实现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;

我已经实施了同样的工作。


0
投票

我通过在刷新函数中调用"yourRefreshControl".endEditing()解决了这个问题。


10
投票

试试这个:

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

9
投票

你有几种方法可以做到这一点。我认为最好的方法是使用以下方法检查viewDidLoad方法:

if (condition){
 //attach refreshControl
}

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

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

5
投票

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


4
投票

我设置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没有帮助


1
投票

你不能使用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;
    }
} 

希望这对你有用。


1
投票

隐藏刷新控制并避免警告只需使用

目标C.

[self.refreshControl removeFromSuperview];

迅速

self.refreshControl.removeFromSuperview()

1
投票

一个老问题,但我正在寻找一个答案,没有任何工作完全像我想要的。

这对我有用:

斯威夫特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。

我不得不删除我最初添加到刷新控件的相同目标,否则它会在实际删除之前刷新一次。


0
投票
[refreshControl setTintColor:[UIColor clearColor]];

你也可以这样做:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y < 0)
        scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}
© www.soinside.com 2019 - 2024. All rights reserved.