Как мне «скрыть» UirefreshControl? -- ios поле с участием objective-c поле с участием uirefreshcontrol пол Связанный проблема

How do I “hide” a UIRefreshControl?


33
vote

проблема

русский

Изредка мой табличный вид не будет подключен к услуге для обновления, и в этом случае я не хочу присутствовать uairefreshcontrol.

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

Английский оригинал

Occasionally my table view won't be connected to a service to refresh, and in that case, I don't want the UIRefreshControl to be present.

After I add it in viewDidLoad, I've tried hiding it under certain circumstances with setEnabled: and setHidden: but neither seems to work.

</div
        
 
 

Список ответов

39
 
vote
vote
Лучший ответ
 

Попробуйте установить таблицу Просмотр контроллера <код> refreshControl Свойство на Nil.

 

Try setting your table view controller's refreshControl property to nil.

</div
 
 
       
       
9
 
vote

Попробуйте:

 <код> [self.refreshControl removeFromSuperview]; self.refreshControl = nil;   
 

Try this:

[self.refreshControl removeFromSuperview]; self.refreshControl = nil; 
</div
 
 
9
 
vote

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

 <код> if (condition){  //attach refreshControl }   

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

 <код> //End refresh control [self.refreshControl endRefreshing]; //Remove refresh control to superview [self.refreshControl removeFromSuperview];   
 

You have several ways to do this. I think the best way is to do a check in the viewDidLoad method with:

if (condition){  //attach refreshControl } 

if this isn't possible the best way is put this code where you want to hide the refresh (I think in viewWillAppear method in if condition)

//End refresh control [self.refreshControl endRefreshing]; //Remove refresh control to superview [self.refreshControl removeFromSuperview]; 
</div
 
 
 
 
6
 
vote

У меня был плохой опыт, когда установлен <код> tableView.refreshConrol = nil , потому что когда я настроил его обратно в старый <код> refreshControl , он начал анимацию только за секунду, так что это выглядело не хорошо, так что Когда мне нужно отключить <код> refreshControl Я использую:

 <код> tableView.refreshControl?.endRefreshing() tableView.refreshControl?.alpha = 0   

Когда мне нужно его обратно, я использую:

 <код> <input id="year" data-fullyear="" placeholder="yyyy" maxlength="4">  $("#year")   .on("blur",e=>{         let $this = $(e.currentTarget);     let value = $this.val();     if(value.length===4){         $this.data("fullyear",value)         $this.val(value.substring(2));     }else{         $this.data("fullyear","")         $this.val("");     }   })   .on("focus",e=>{     let $this = $(e.currentTarget);     let value = $this.val();     if(value.length===2){         let fullYear = $this.data("fullyear");         $this.val(fullYear);     }else{         $this.val("");     }   }); 0  

P.S. Установка <код> <input id="year" data-fullyear="" placeholder="yyyy" maxlength="4"> $("#year") .on("blur",e=>{ let $this = $(e.currentTarget); let value = $this.val(); if(value.length===4){ $this.data("fullyear",value) $this.val(value.substring(2)); }else{ $this.data("fullyear","") $this.val(""); } }) .on("focus",e=>{ let $this = $(e.currentTarget); let value = $this.val(); if(value.length===2){ let fullYear = $this.data("fullyear"); $this.val(fullYear); }else{ $this.val(""); } }); 1 не помогло

 

I had bad experience when set tableView.refreshConrol = nil , because when I set it back to old refreshControl, it started animation only in a second, so it looked not good, so when I need to disable refreshControl I use:

tableView.refreshControl?.endRefreshing() tableView.refreshControl?.alpha = 0 

when I need it back I use:

tableView.refreshControl?.alpha = 1 // and if I need to show refreshing indicator immediately I write: tableView.refreshControl?.beginRefreshing() 

P.S. Setting isHidden, isEnabled, isUserInteractionEnabled didn't help

</div
 
 
5
 
vote

Есть очень простое решение, которое вы можете попробовать: <код> <input id="year" data-fullyear="" placeholder="yyyy" maxlength="4"> $("#year") .on("blur",e=>{ let $this = $(e.currentTarget); let value = $this.val(); if(value.length===4){ $this.data("fullyear",value) $this.val(value.substring(2)); }else{ $this.data("fullyear","") $this.val(""); } }) .on("focus",e=>{ let $this = $(e.currentTarget); let value = $this.val(); if(value.length===2){ let fullYear = $this.data("fullyear"); $this.val(fullYear); }else{ $this.val(""); } }); 2

 

There’s a very simple solution you can try: [self.refreshControl removeFromSuperview];

</div
 
 
1
 
vote

Вы не можете удалить UirefreshControl, используя <код> setEnabled:NO , поэтому к этому вам нужно удалить его из его руководителя. Я попробовал образец с использованием класса достижения доступа к 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;     } }    

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

 

You can not remove the UIRefreshControl using setEnabled:NO,so to this you have to remove it from it's superview.I have tried a sample using Reachability class provided by Apple.

To add UIRefreshControl you can use this:

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

Then Implemented reachability class notification :

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

You can do it by using bool flag to check the connectivity ,Here i'm providing this example using reachability class by apple to check my connectivity.

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

Hope this will work for you.

</div
 
 
 
 
1
 
vote

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

Цель C

<Код> [self.refreshControl removeFromSuperview];

Swift

 <код> self.refreshControl.removeFromSuperview()   
 

To hide refresh control and avoid warning Just use

Objective C

[self.refreshControl removeFromSuperview];

Swift

self.refreshControl.removeFromSuperview() 
</div
 
 
1
 
vote

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

 

I solved this problem by calling "yourRefreshControl".endEditing() inside the refresh function.

</div
 
 
1
 
vote

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

Это то, что работало для меня:

<Сильные> 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 }   

Я звоню CreateerfreshControl (), когда я хочу создать элемент управления, и восстановитьfreshControl, когда я хочу, чтобы он удален.

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

 

An old question, but I was looking for an answer and nothing worked exactly like I wanted.

This is what worked for me:

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 } 

I call createRefreshControl() when I want the control created, and removeRefreshControl when I want it removed.

I had to remove the same target I initially added to the refresh control, otherwise it would refresh one time before it was actually removed.

</div
 
 
0
 
vote
 <код> [refreshControl setTintColor:[UIColor clearColor]];   

Также вы можете сделать что-то подобное:

 <код> - (void)scrollViewDidScroll:(UIScrollView *)scrollView {     if (scrollView.contentOffset.y < 0)         scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0); }   
 
[refreshControl setTintColor:[UIColor clearColor]]; 

also you can do something like this:

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

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

 <код> 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]; 0  
 

I solved it this way:

-(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]; } 
</div
 
 
0
 
vote

Лучшее для реализации 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]; 1  

Когда больше нет записи для загрузки, то удалите RefreshControl на следующую строку

 <код> 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]; 2  

Я внедрил же отлично.

 

The best to implement UIRefreshControl is below.

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

When there is no more record to load then remove refreshControl by below line

self.tableView.refreshControl = nil; 

I have implemented same working fine.

</div
 
 

Связанный проблема

1  Есть ли способ использовать координаты для выбора элемента в автоматизации тестирования IOS UI?  ( Is there a way to use coordinates to select an element in ios ui test automation ) 
Я имею дело с <код> UICollectionView , который имеет много элементов. Один из них, это <код> UISuplementaryView , который содержит множество кликабельных ячее...

1  Обновление NsmanageObjects на заднем плане  ( Updating nsmanagedobjects in the background ) 
Я пытаюсь обновить NSManagedObject в фоновом режиме на основе свойств из сети сети. Возникли проблемы с обертыванием моей головы вокруг параллелизма. То, что ...

-1  Переместите анимированный символ только в то время как кнопка удерживается  ( Move an animated character only while a button is held down ) 
Я пытался сделать накрасочный персонаж двигаться с четырьмя стрелками: вверх, прямо, левый и вниз, как игровая мальчик. Я сделал это: <код> - (IBActio...

2223  Вертикально выровнять текст на вершину внутри UILabel  ( Vertically align text to top within a uilabel ) 
У меня есть <код> UILabel с пространством для двух строк текста. Иногда, когда текст слишком короткий, этот текст отображается в вертикальном центре метки. ...

15  Получение новейших уведомлений только тогда, когда приложение работает  ( Receiving newsstand notifications only when app is running ) 
Я не получаю уведомления в газете, когда приложение не работает, вот что я сделал. Приложение имеет правильные клавиши Plist 'uinewsstancstApp = yes and' ui...

0  Уволить контроллер просмотра, когда он был назван «PerforgeGege»?  ( Dismiss view controller when it was called by performsegue ) 
У меня есть три контроллера просмотра: <код> Main , <код> VC1 , а <код> VC2 . Всякий раз, когда приложение запускает метод делегата определяет, какой VC будет...

2  Мое обновление приложения iOS удаляет постоянные данные из старой версии пользователей  ( My ios app update deletes persistent data from users older version ) 
В моем приложении iOS я разрешу пользователя сохранить свои пресеты пользовательского интерфейса. <код> public interface ITestServiceCallback { [Operati...

46  Как проверить push-уведомление работает в моем приложении  ( How to test push notification is working in my application ) 
В моем приложении я реализую службу Push-уведомления. У меня есть сервер поставщика контента, который содержит некоторые продукты в нем. Я создал сертификат...

2  Wkwebview: возможно ли предварительно загрузить несколько URL?  ( Wkwebview is it possible to preload multiple urls ) 
Просто мигрировал приложение на <код> WKWebView и был заданным вопросом, есть ли возможным способом «предварительно загрузить несколько URL-адресов, но тольк...

32  В чем разница между ns_enum и ns_options?  ( What is the difference between ns enum and ns options ) 
i предварительно назначил следующий код с помощью clang в xcode5. <код> typedef NS_ENUM(NSInteger, MyStyle) { MyStyleDefault, MyStyleCustom }; type...

0  Realm.io Array Создание  ( Realm io array creation ) 
Какой правильный способ создать rlmobject с массивом других rlmobjects? Документы ничего не упоминают и мои первоначальные попытки (ничего не делайте, предп...

0  «NsconcretemutableAttribedString initwithString) :: Nil Value 'при использовании Google рядом с сообщениями  ( Nsconcretemutableattributedstring initwithstring nil value when using google ) 
Я следовал в документации Google для использования API BearmyBymessages. Я использую Swift3. У меня есть следующий код, чтобы настроить приложение для публика...

0  Падение на хранение текущего пользователя в основных данных  ( Falling to store current user in core data ) 
Что-то действительно странное происходит с моим кодом, и я не знаю, как это исправить. Когда я хочу хранить некоторые пользователи в основных данных, он работ...

0  Симулятор iPad показывает черный экран слева?  ( Ipad simulator showing black screen on the left ) 
Привет, я делаю приложение iPhone / iPad. Однако в симуляторе iPad экран показывает черный экран слева без видимых причин. Я запустил приложение с симулято...

-1  Могу ли я использовать PHP без протокола веб-службы стиля отдыха для создания сервера пропуска? [закрыто]  ( Can i use php without rest style web service protocol to create server of pass ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

Связанный проблема

1  Есть ли способ использовать координаты для выбора элемента в автоматизации тестирования IOS UI? 
1  Обновление NsmanageObjects на заднем плане 
-1  Переместите анимированный символ только в то время как кнопка удерживается 
2223  Вертикально выровнять текст на вершину внутри UILabel 
15  Получение новейших уведомлений только тогда, когда приложение работает 
0  Уволить контроллер просмотра, когда он был назван «PerforgeGege»? 
2  Мое обновление приложения iOS удаляет постоянные данные из старой версии пользователей 
46  Как проверить push-уведомление работает в моем приложении 
2  Wkwebview: возможно ли предварительно загрузить несколько URL? 
32  В чем разница между ns_enum и ns_options? 
0  Realm.io Array Создание 
0  «NsconcretemutableAttribedString initwithString) :: Nil Value 'при использовании Google рядом с сообщениями 
0  Падение на хранение текущего пользователя в основных данных 
0  Симулятор iPad показывает черный экран слева? 
-1  Могу ли я использовать PHP без протокола веб-службы стиля отдыха для создания сервера пропуска? [закрыто] 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.