带有加载指示器的UISearchController

我实现了UISearchController ,我从jscallback中获取数据,但是当我在searchsearchbar放入数据时,需要一些时间来放置数据,所以我想知道如何在UISearchController的表视图结果中实现一个加载indicator

当你开始search的时候,你可以创build一个活动指标,并使用addSubView方法将其添加为UISearchBarsubview

  UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; //set your frame for activity indicator [searchBar addSubview: spinner]; [spinner startAnimating]; 

完成search后,使用removeFromSuperView方法将其从search栏中删除。

在Swift 3中写了这个扩展,这似乎工作得很好。

 extension UISearchBar { private var textField: UITextField? { return subviews.first?.subviews.flatMap { $0 as? UITextField }.first } private var activityIndicator: UIActivityIndicatorView? { return textField?.leftView?.subviews.flatMap{ $0 as? UIActivityIndicatorView }.first } var isLoading: Bool { get { return activityIndicator != nil } set { if newValue { if activityIndicator == nil { let newActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) newActivityIndicator.transform = CGAffineTransform(scaleX: 0.7, y: 0.7) newActivityIndicator.startAnimating() newActivityIndicator.backgroundColor = UIColor.white textField?.leftView?.addSubview(newActivityIndicator) let leftViewSize = textField?.leftView?.frame.size ?? CGSize.zero newActivityIndicator.center = CGPoint(x: leftViewSize.width/2, y: leftViewSize.height/2) } } else { activityIndicator?.removeFromSuperview() } } } } 

在search结果控制器上加载指标

请试试这个。 可能对你有帮助

SearchBarWithloading.h

 #import <UIKit/UIKit.h> @interface SearchBarWithloading : UISearchBar - (void)startActivity; // increments startCount and shows activity indicator - (void)finishActivity; // decrements startCount and hides activity indicator if 0 @end 

SearchBarWithloading.m

 import "SearchBarWithloading.h" @interface SearchBarWithloading() @property(nonatomic) UIActivityIndicatorView *activityIndicatorView; @property(nonatomic) int startCount; @end @implementation SearchBarWithloading - (void)layoutSubviews { UITextField *searchField = nil; for(UIView* view in self.subviews){ if([view isKindOfClass:[UITextField class]]){ searchField= (UITextField *)view; break; } } if(searchField) { if (!self.activityIndicatorView) { UIActivityIndicatorView *taiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; taiv.center = CGPointMake(searchField.leftView.bounds.origin.x + searchField.leftView.bounds.size.width/2, searchField.leftView.bounds.origin.y + searchField.leftView.bounds.size.height/2); taiv.hidesWhenStopped = YES; taiv.backgroundColor = [UIColor whiteColor]; self.activityIndicatorView = taiv; [taiv release]; _startCount = 0; [searchField.leftView addSubview:self.activityIndicatorView]; } } [super layoutSubviews]; } - (void)startActivity { self.startCount = self.startCount + 1; } - (void)finishActivity { self.startCount = self.startCount - 1; } - (void)setStartCount:(int)startCount { _startCount = startCount; if (_startCount > 0) [self.activityIndicatorView startAnimating]; else { [self.activityIndicatorView stopAnimating]; } } @end