【问题标题】:activity Indicator as global property活动指标作为全局属性
【发布时间】:2016-03-02 23:58:00
【问题描述】:

我对编程还是很陌生,有时它会用非常基本的概念来咬我。 我在我的 tableviewcontroller 中定义了一个活动指示器作为 Outlet。

 @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

用数据填充表格视图的数据下载是在具有下载功能的类中的单独文件中完成的。这些函数包括下载的完成处理程序。现在,如果我想插入

activityIndicator.stopAnimating()

在完成部分,我收到消息“使用未解析的标识符 activityIndi​​cator”。如何分别使 acitivityIndi​​cator 成为全局属性,如何使下载类/函数识别 tableViewController 中定义的 activityIndi​​cator?我知道这对你们大多数人来说可能是一个愚蠢的问题,但我就是不知道如何解决这个问题。

【问题讨论】:

    标签: swift android-activity properties global indicator


    【解决方案1】:

    理想情况下,您不希望下载代码“了解”activityIndi​​cator。当您的 viewController 调用下载时,您可以传递另一个完成处理程序。然后当下载完成处理程序运行时,调用这个新的完成处理程序。 viewController 知道 activityIndi​​cator,所以它可以停止它。大致如下:

     // In ViewController
         myThing.doTheDownload(completion: {
             dispatch_async(dispatch_get_main_queue(), {
                 self.activityIndicator.stopAnimating()
             })
         })
    
     // In download code
         func doTheDownload(completion completionHandler: (() -> Void)) {
              download(completion: {
                  completionhandler()
              })
         }
    

    注意,activityIndi​​cator 是一个 UI 元素,因此它的代码必须在主线程上运行。

    【讨论】:

    • 只是另一个问题 - 如果我有许多带有完成处理程序的下载函数,并且我希望 activityIndi​​cator 仅在所有这些函数都被下载后才停止?
    • 他们都可以调用同一个完成处理程序,它会计算调用次数并在达到总数时停止指示器。您唯一需要注意的是计数需要是线程安全的,所以如果这也在主队列上完成,这是最简单的。
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2011-07-26
    • 1970-01-01
    • 2022-10-13
    • 2010-11-20
    相关资源
    最近更新 更多