時々、テーブルビューが更新するサービスに接続されないことがあります。その場合、UIRefreshControlを表示したくないことがあります。
ViewDidLoadに追加した後、特定の状況下でsetEnabled:
およびsetHidden:
しかし、どちらも機能していないようです。
Table View ControllerのrefreshControl
プロパティをnilに設定してみてください。
これを試して:
[self.refreshControl removeFromSuperview];
self.refreshControl = nil;
これを行うにはいくつかの方法があります。私が最善の方法は、viewDidLoadメソッドでチェックを行うことだと思います:
if (condition){
//attach refreshControl
}
これが不可能な場合、最良の方法は、リフレッシュを非表示にする場所にこのコードを配置することです(if条件のviewWillAppearメソッドで考える)
//End refresh control
[self.refreshControl endRefreshing];
//Remove refresh control to superview
[self.refreshControl removeFromSuperview];
試すことができる非常に簡単なソリューションがあります:[self.refreshControl removeFromSuperview];
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
を設定しても解決しませんでした
リフレッシュコントロールを非表示にして警告を回避するには
客観的C
[self.refreshControl removeFromSuperview];
Swift
self.refreshControl.removeFromSuperview()
古い質問ですが、私は答えを探していましたが、私が望んでいた通りにはうまくいきませんでした。
これは私のために働いたものです:
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回更新されます。
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;
}
}
これがあなたのために働くことを願っています。
[refreshControl setTintColor:[UIColor clearColor]];
また、あなたはこのようなことをすることができます:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0)
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 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;
私は同じ働きをうまく実装しました。
リフレッシュ関数内で"yourRefreshControl".endEditing()
を呼び出すことでこの問題を解決しました。
私はこのように解決しました:
-(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];
}