Подтвердить что ты не робот

Как "скрыть" UIRefreshControl?

Иногда мое представление таблицы не подключается к службе для обновления, и в этом случае я не хочу, чтобы присутствовал UIRefreshControl.

После того, как я добавлю его в viewDidLoad, я попытался скрыть его при определенных обстоятельствах с помощью setEnabled: и setHidden:, но ни один из них не работает.

4b9b3361

Ответ 1

Попробуйте установить для вашего контроллера табличного представления refreshControl значение nil.

Ответ 2

Попробуйте следующее:

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

Ответ 3

У вас есть несколько способов сделать это. Я считаю, что лучший способ - проверить метод viewDidLoad с помощью:

if (condition){
 //attach refreshControl
}

если это невозможно, лучший способ поставить этот код, где вы хотите скрыть обновление (я думаю, в viewWillAppear метод в условии if)

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

Ответ 4

Theres очень простое решение, которое вы можете попробовать: [self.refreshControl removeFromSuperview];

Ответ 5

У меня был плохой опыт, когда set tableView.refreshConrol = nil, потому что когда я устанавливал его обратно в old 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()

PS Настройка isHidden, isEnabled, isUserInteractionEnabled не помогла

Ответ 6

Вы не можете удалить UIRefreshControl с помощью setEnabled:NO, поэтому вам нужно удалить его из него. Я попробовал образец, используя класс Reachability, предоставляемый Apple.

Чтобы добавить 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;
    }
} 

Надеюсь, это сработает для вас.

Ответ 7

Чтобы скрыть контроль обновления и избежать предупреждения Просто используйте

Цель С

[self.refreshControl removeFromSuperview];

стриж

self.refreshControl.removeFromSuperview()

Ответ 8

[refreshControl setTintColor:[UIColor clearColor]];

также вы можете сделать что-то вроде этого:

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

Ответ 9

Я решил это так:

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

Ответ 10

Лучше всего реализовать 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;

Я выполнил тот же рабочий тон.

Ответ 11

Старый вопрос, но я искал ответ, и ничего не получилось так, как я хотел.

Вот что сработало для меня:

Swift 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, когда хочу его удалить.

Мне пришлось удалить ту же цель, которую я изначально добавил к элементу управления обновлением, иначе он обновился бы один раз, прежде чем он был фактически удален.

Ответ 12

Я решил эту проблему, вызвав "yourRefreshControl".endEditing() внутри функции обновления.