UISearchBar在Swift中完成后如何停止UIActivityIndi​​cator

Posted

技术标签:

【中文标题】UISearchBar在Swift中完成后如何停止UIActivityIndi​​cator【英文标题】:How to stop UIActivityIndicator after UISearchBar has finished in Swift 【发布时间】:2016-02-07 22:12:37 【问题描述】:

所以我的设置:

我有一个使用 Parse 设置的应用程序,我使用的是 PFQueryTableViewController。我在屏幕上添加了UISearchBar。我已经设置好这个搜索并且工作正常。

问题:为了让用户更清楚地看到正在执行搜索,我想添加一个UIActivityIndicator,以便他们可以看到正在加载的内容。我也会beginIgnoringInteractionEvents(),所以他们在搜索完成之前不能使用该应用程序。

我目前遇到了如何使UIActivityIndicator 停止动画以及endIgnoringInteractionEvents() 的问题-我只是无法确定将这段代码放在哪里:

spinningActivityIndicator.stopAnimating() UIApplication.sharedApplication().endIgnoringInteractionEvents()

我已将UIActivityIndicator 的代码放在func searchBarSearchButtonClicked(searchBar: UISearchBar) 方法中,这样一旦他们在键盘上单击搜索,微调器就会启动。

但是我可以在哪里放置代码以停止动画并再次启用应用程序?

我为 UISearchBar 添加的代码如下:

func searchBarTextDidBeginEditing(searchBar: UISearchBar) 

    searchBar.showsCancelButton = true

    self.loadObjects()



func searchBarTextDidEndEditing(searchBar: UISearchBar) 

    // Dismiss the keyboard
    searchBar.resignFirstResponder()

    // Force reload of table data
    self.loadObjects()


func searchBarSearchButtonClicked(searchBar: UISearchBar) 

    // Dismiss the keyboard
    searchBar.resignFirstResponder()

    spinningActivityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
    spinningActivityIndicator.center = self.view.center
    spinningActivityIndicator.hidesWhenStopped = true
    spinningActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(spinningActivityIndicator)
    spinningActivityIndicator.startAnimating()
    UIApplication.sharedApplication().beginIgnoringInteractionEvents() 

    searchBar.showsCancelButton = false

    // Force reload of table data
    self.loadObjects()



func searchBarCancelButtonClicked(searchBar: UISearchBar) 

    // Clear any search criteria
    searchBar.text = ""

    // Dismiss the keyboard
    searchBar.resignFirstResponder()

    // Force reload of table data
    self.loadObjects()

我在func queryForTable() -> PFQuery 中添加了:

    if filmSearchBar.text != "" 
        query.whereKey("FilmName", containsString: filmSearchBar.text!)

    

提前致谢!

【问题讨论】:

那么您的搜索实际上在做什么,执行对服务器的调用或只是过滤本地数据源? 从哪里获得搜索结果?因为这是你停止活动指示器的地方 @dzk 是的,我相信是的。这是我第一次使用UISearchBar。如果有帮助,我会继续学习本教程:blog.bizzi-body.com/2015/03/08/… - 他们将搜索部分添加到页面的一半左右。 UISearchBar没多大关系,和你完成self.loadObjects()有关。如果这是一个耗时的过程,请在完成该过程后进行。 【参考方案1】:

我刚刚查看了PFQueryTableViewController 的一些文档,并且有一种方法objectsDidLoad() 似乎很有希望。所以,试着在你的 queryForTable() 函数下面添加这个:

override func objectsDidLoad(error: NSError?) 
    super.objectsDidLoad(error)
    // Your code here to stop the UIActivityIndicator

您可以在函数内添加print("objectsDidLoad") 以查看它是否有效。

【讨论】:

以上是关于UISearchBar在Swift中完成后如何停止UIActivityIndi​​cator的主要内容,如果未能解决你的问题,请参考以下文章

UISearchBar 检测用户何时停止快速输入

如何在 Swift 中更改 UISearchBar 上的“取消”按钮的颜色

如何在swift 3中过滤UISearchBar中的数组模型

如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取多个实体?

如何将 UiSearchBar 的背景颜色更改为黑色-SWIFT

iOS,Swift 3 - 当我从详细视图返回后单击取消时,UISearchBar 消失