web-dev-qa-db-ja.com

UIRefreshControlを「非表示」にするにはどうすればよいですか?

時々、テーブルビューが更新するサービスに接続されないことがあります。その場合、UIRefreshControlを表示したくないことがあります。

ViewDidLoadに追加した後、特定の状況下でsetEnabled:およびsetHidden:しかし、どちらも機能していないようです。

31
Doug Smith

Table View ControllerのrefreshControlプロパティをnilに設定してみてください。

36

これを試して:

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

これを行うにはいくつかの方法があります。私が最善の方法は、viewDidLoadメソッドでチェックを行うことだと思います:

if (condition){
 //attach refreshControl
}

これが不可能な場合、最良の方法は、リフレッシュを非表示にする場所にこのコードを配置することです(if条件のviewWillAppearメソッドで考える)

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

試すことができる非常に簡単なソリューションがあります:[self.refreshControl removeFromSuperview];

5
jenish

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を設定しても解決しませんでした

4
Paul T.

リフレッシュコントロールを非表示にして警告を回避するには

客観的C

[self.refreshControl removeFromSuperview];

Swift

self.refreshControl.removeFromSuperview()
1

古い質問ですが、私は答えを探していましたが、私が望んでいた通りにはうまくいきませんでした。

これは私のために働いたものです:

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を呼び出します。

最初に更新コントロールに追加したターゲットと同じターゲットを削除する必要がありました。そうしないと、実際に削除される前に1回更新されます。

1
iOS_Mouse

setEnabled:NOを使用してUIRefreshControlを削除することはできません。そのため、スーパービューから削除する必要があります。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
Arun_
[refreshControl setTintColor:[UIColor clearColor]];

また、あなたはこのようなことをすることができます:

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

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
Pandey_Laxman

リフレッシュ関数内で"yourRefreshControl".endEditing()を呼び出すことでこの問題を解決しました。

0
Eskil Olsen

私はこのように解決しました:

-(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
Ilya Stroganov