xcode iOS:UISearchBar 中的 UIActivityIndi​​cator

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13275643/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 02:02:18  来源:igfitidea点击:

iOS: UIActivityIndicator in UISearchBar

iosxcodesearchuisearchbaruiactivityindicatorview

提问by filou

Is it possible to display an UIActivityIndicator in the UISearchBar while searching?

是否可以在搜索时在 UISearchBar 中显示 UIActivityIndi​​cator?

采纳答案by Midhun MP

Yes you can.

是的你可以。

When start searching create an activity indicator and add it as the subview of UISearchBarusing addSubViewmethod. When you finish the search remove it from the search bar using removeFromSuperViewmethod.

开始搜索时创建一个活动指示器并将其添加为UISearchBar使用addSubView方法的子视图。完成搜索后,使用removeFromSuperView方法将其从搜索栏中删除。

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

Refer this link for an alternative way.

请参阅此链接以获取替代方法

回答by Toseef Khilji

Update for iOS 13.

iOS 13更新

ios13

ios13

You can use below extension in Swift 4+. Usage:

您可以在 Swift 4+ 中使用以下扩展。用法:

To show activity : searchBar.isLoading = true

显示活动: searchBar.isLoading = true

To hide activity : searchBar.isLoading = false

隐藏活动: searchBar.isLoading = false

UISearchBar Extension

UISearchBar 扩展

extension UISearchBar {

    public var textField: UITextField? {
        if #available(iOS 13.0, *) {
            return self.searchTextField
        } else {
            let subViews = subviews.flatMap { ##代码##.subviews }
            guard let textField = (subViews.filter { ##代码## is UITextField }).first as? UITextField else {
                return nil
            }
            return textField
        }
    }

    public var activityIndicator: UIActivityIndicatorView? {
        return textField?.leftView?.subviews.flatMap{ ##代码## 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()
            }
        }
    }
}