2016-06-08 2 views
1

Я внедрил UISearchController, и я получаю данные из обратного вызова js, но когда я записываю ленту в searchbar, требуется некоторое время, чтобы поместить данные, чтобы я хотел знать, как реализовать загрузку indicator в таблицу вид результат UISearchControllerUISearchController с индикатором загрузки

ответ

0

Когда вы начинаете поиск в то время вы можете создать индикатор активности и добавить его в качестве subview из UISearchBar использования addSubView метода.

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

//set your frame for activity indicator 

[searchBar addSubview: spinner]; 

[spinner startAnimating]; 

После завершения поиска удалите его из строки поиска с помощью метода removeFromSuperView.

+0

Спасибо, что я искал;) –

+0

рад .. я мог бы помочь .. :) –

0

Пожалуйста, попробуйте этот. Может быть его полезным для вас

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 
7

Написал это расширение в 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() 
      } 
     } 
    } 
} 

Loading indicator on search results controller

+0

Nice один ниндзя! – Aaronium112

Смежные вопросы