有时我的表格视图不会连接到要刷新的服务,在这种情况下,我不希望 UIRefreshControl 存在。
在 viewDidLoad 中添加它之后,我尝试在某些情况下隐藏它setEnabled:
,setHidden:
但似乎都不起作用。
有时我的表格视图不会连接到要刷新的服务,在这种情况下,我不希望 UIRefreshControl 存在。
在 viewDidLoad 中添加它之后,我尝试在某些情况下隐藏它setEnabled:
,setHidden:
但似乎都不起作用。
尝试将表视图控制器的refreshControl
属性设置为零。
你有几种方法可以做到这一点。我认为最好的方法是检查 viewDidLoad 方法:
if (condition){
//attach refreshControl
}
如果这不可能,最好的方法是将此代码放在要隐藏刷新的位置(我认为在 if 条件下的 viewWillAppear 方法中)
//End refresh control
[self.refreshControl endRefreshing];
//Remove refresh control to superview
[self.refreshControl removeFromSuperview];
尝试这个:
[self.refreshControl removeFromSuperview];
self.refreshControl = nil;
我在 set 时有不好的体验tableView.refreshConrol = nil
,因为当我将它设置回 old 时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()
PS设置isHidden, isEnabled, isUserInteractionEnabled
没有帮助
您可以尝试一个非常简单的解决方案:[self.refreshControl removeFromSuperview];
一个老问题,但我一直在寻找答案,但没有什么能完全符合我的要求。
这对我有用:
斯威夫特 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。
我必须删除我最初添加到刷新控件中的相同目标,否则它会在实际删除之前刷新一次。
您不能使用 删除 UIRefreshControl setEnabled:NO
,因此您必须将其从它的 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 标志来检查连接性来做到这一点,这里我提供了这个示例,使用苹果的可达性类来检查我的连接性。
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;
}
}
希望这对你有用。
隐藏刷新控制并避免警告只需使用
目标 C
[self.refreshControl removeFromSuperview];
迅速
self.refreshControl.removeFromSuperview()
我通过"yourRefreshControl".endEditing()
在刷新函数内部调用解决了这个问题。
[refreshControl setTintColor:[UIColor clearColor]];
你也可以这样做:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0)
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 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];
}
下面是实现 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;
我已经实现了同样的工作正常。
尝试在 Xcode 12 上使用iOS_Mouse的此解决方案。IOS 14.4.1 但它无法正常工作。设法将其调整为这样。(请注意,这适用于我的用例UISegmentedControl
。我有一个不同的表,其中只有 1 个我希望能够使用 Pull To Refresh 功能。
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()
}
}