2013-10-20 25 views
23

Od czasu do czasu mój widok tabeli nie jest połączony z usługą do odświeżania iw tym przypadku nie chcę, aby UIRefreshControl było obecne.Jak "ukryć" UIRefreshControl?

Po dodaniu go w viewDidLoad, próbowałem ukryć go w pewnych okolicznościach z setEnabled: i setHidden:, ale nic nie działa.

+1

Można znaleźć to śmieszne. Próbowałem podkategorii zarówno kontroli i tableview. Przechwyciłem wiadomości, szukając czegoś, co można wykorzystać, bez powodzenia. W końcu przy widoku tabeli przesłoniłem -podgląd, aby ukryć kontrolę, bez powodzenia. W końcu, jeśli wszystko co robisz, wystarczy dodać kontrolkę za pomocą funkcji addSubview, widok tabeli ma silne odniesienie do niej. Żadna ilość ukrywania się, mocowania ramek nie zadziała. –

Odpowiedz

29

Spróbuj ustawić właściwość kontrolera widoku tabeli na zero.

+1

Jeśli wykonuję kontrolę w viewDidAppear (ustawiając ją, jeśli istnieje usługa, z którą należy się połączyć, ustawiając wartość nil, jeśli nie jest), pojawia się następujące ostrzeżenie, gdy ponownie załaduję widok z kontrolką odświeżania w nim po usunięciu usługi : "Próba zmiany kontrolki odświeżania, gdy nie jest bezczynna, jest zdecydowanie odradzana i prawdopodobnie nie będzie działać poprawnie." (Choć wygląda na to, że działa.) –

+4

Ok, sugeruję wywołanie 'endRefreshing' na kontrole odświeżania przed jego usunięciem. Możesz również spróbować zrobić to w 'viewWillAppear' zamiast' viewDidAppear'. –

+0

'[self.refreshControl endRefreshing];' nadal wyzwala to ostrzeżenie, jeśli zostanie wywołane przed 'self.refreshControl = nil;'. –

0
[refreshControl setTintColor:[UIColor clearColor]]; 

też można zrobić coś takiego:

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

to nie przeszkadza kontroli wyzwalającej odświeżenie. –

8

Spróbuj tego:

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

Nadal je powoduje. –

7

Istnieje kilka sposobów, aby to zrobić. Myślę, że najlepszym sposobem jest zrobić test w metodzie viewDidLoad z:

if (condition){ 
//attach refreshControl 
} 

jeśli nie jest to możliwe, najlepiej jest umieścić ten kod, w którym chcesz, aby ukryć odświeżania (myślę, że w metodzie viewWillAppear jeśli warunek)

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

nie można usunąć UIRefreshControl użyciu setEnabled:NO, więc do tego trzeba go usunąć z jego superview.I próbowali próbki za pomocą klasy osiągalności dostarczonego przez Apple.

Aby dodać UIRefreshControl można użyć to:

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

Następnie Zaimplementowane powiadomienie klasa osiągalności:

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

Można to zrobić za pomocą flagę bool sprawdzić łączność, Tutaj jestem zapewniając tym przykład przy użyciu klasy osiągalności według jabłka, aby sprawdzić moją łączność.

Mam nadzieję, że to zadziała.

+0

w przypadku, gdy ReachableViaWiFi, które zostanie dodane z n = myView.subviews.count od refreshControls, nie jest pożądane – slxl

0

Rozwiązałem to w ten sposób:

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

Jest bardzo proste rozwiązanie można spróbować: [self.refreshControl removeFromSuperview];

0

Najlepszym wdrożyć UIRefreshControl poniżej.

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

Gdy nie ma więcej rekord załadować następnie usunąć refreshControl przez poniżej linii

self.tableView.refreshControl = nil; 

I wprowadziły samo działa poprawnie.

0

Aby ukryć kontrolę odświeżania i uniknąć ostrzeżenie Wystarczy użyć

Objective C

[self.refreshControl removeFromSuperview];

Swift

self.refreshControl.removeFromSuperview()