有时我的表视图不会连接到要刷新的服务,在这种情况下,我不希望UIRefreshControl存在。
我在viewDidLoad中添加它后,我尝试在setEnabled:
和setHidden:
的某些情况下隐藏它,但似乎都不起作用。
答案 0 :(得分:36)
尝试将表视图控制器的refreshControl
属性设置为nil。
答案 1 :(得分:10)
试试这个:
[self.refreshControl removeFromSuperview];
self.refreshControl = nil;
答案 2 :(得分:9)
你有几种方法可以做到这一点。 我认为最好的方法是使用以下方法检查viewDidLoad方法:
if (condition){
//attach refreshControl
}
如果这是不可能的,那么最好的方法就是将这段代码放在你要隐藏刷新的位置(我认为在if条件下的viewWillAppear方法中)
//End refresh control
[self.refreshControl endRefreshing];
//Remove refresh control to superview
[self.refreshControl removeFromSuperview];
答案 3 :(得分:5)
您可以尝试一种非常简单的解决方案:[self.refreshControl removeFromSuperview];
答案 4 :(得分:2)
设置tableView.refreshConrol = nil
时,我的经历很糟糕,因为当我将其设置回旧的refreshControl
时,它仅在一秒钟内开始播放动画,因此效果不佳,因此需要禁用{ {1}}我使用:
refreshControl
当我需要它时,我使用:
tableView.refreshControl?.endRefreshing()
tableView.refreshControl?.alpha = 0
P.S。设置tableView.refreshControl?.alpha = 1
// and if I need to show refreshing indicator immediately I write:
tableView.refreshControl?.beginRefreshing()
并没有帮助
答案 5 :(得分:1)
你不能使用setEnabled:NO
删除UIRefreshControl,所以你必须从它的superview中删除它。我已经尝试使用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;
}
}
希望这对你有用。
答案 6 :(得分:1)
隐藏刷新控制并避免警告只需使用
目标C
[self.refreshControl removeFromSuperview];
self.refreshControl.removeFromSuperview()
答案 7 :(得分:0)
[refreshControl setTintColor:[UIColor clearColor]];
你也可以这样做:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0)
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}
答案 8 :(得分:0)
我这样解决了:
-(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];
}
答案 9 :(得分: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;
我已经实施了相同的工作。
答案 10 :(得分:0)
一个老问题,但我正在寻找一个答案,没有任何工作完全像我想要的那样。
这对我有用:
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。
我必须删除最初添加到刷新控件中的相同目标,否则它会在实际删除之前刷新一次。
答案 11 :(得分:0)
我通过在刷新函数中调用"yourRefreshControl".endEditing()
解决了这个问题。
答案 12 :(得分:0)
尝试在 Xcode 12. IOS 14.4.1 上使用 iOS_Mouse 中的此解决方案,但无法正常工作。设法将其调整为这个。 (请注意,这是针对我使用 UISegmentedControl
的用例。我有不同的表,其中只有 1 个我希望能够使用“下拉刷新”功能。
var refreshControl = UIRefreshControl()
@IBAction func vcLibFilterPressed(_ sender: UISegmentedControl) {
removeRefreshControl()
switch vcLibSegmentedControl.selectedSegmentIndex {
case 0: // Plan
enableDisableSegmentedControl()
vcLibTableView.reloadData()
case 1: // Tag
vcLibTableView.reloadData()
createRefreshControl()
default:
break
}
}
func createRefreshControl() {
refreshControl.addTarget(self, action: #selector(syncDropbox), for: .valueChanged)
refreshControl.tintColor = UIColor.red
refreshControl.attributedTitle = NSAttributedString(string: " ↓ Refresh ↓ ")
tableView.refreshControl = refreshControl
}
func removeRefreshControl() {
refreshControl.removeTarget(self, action: #selector(syncDropbox), for: .valueChanged)
tableView.refreshControl = nil
}
@objc func syncDropbox(refreshControl: UIRefreshControl) {
if vcLibSegmentedControl.selectedSegmentIndex == 1 {
// DO Internet Stuffs
// somewhere in your code you might need to call:
refreshControl.endRefreshing()
}
}