xcode iOS:UISearchBar 中的 UIActivityIndicator
声明:本页面是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
iOS: UIActivityIndicator in UISearchBar
提问by filou
Is it possible to display an UIActivityIndicator in the UISearchBar while searching?
是否可以在搜索时在 UISearchBar 中显示 UIActivityIndicator?
采纳答案by Midhun MP
Yes you can.
是的你可以。
When start searching create an activity indicator and add it as the subview of UISearchBar
using addSubView
method. When you finish the search remove it from the search bar using removeFromSuperView
method.
开始搜索时创建一个活动指示器并将其添加为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更新。
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()
}
}
}
}