【问题标题】:Display Activity Indicator in tableview cell在表格视图单元格中显示活动指示器
【发布时间】:2016-11-09 21:16:00
【问题描述】:

我正在一个基本的 tableview 单元格中加载不同的图像,并希望在加载图像时在单元格中显示活动指示器。我正在使用一个单独的单元格文件,例如示例代码。我知道将代码放在哪里,只是不确定语法。我找到了一些将代码放入视图但不是专门放入单元格的方法。有人有想法吗?谢谢。

func configureCell(favorite: Article) {
    self.favorite = favorite

    downloadImage(NSURL(string: self.favorite.mainImage)!)

func downloadImage(url: NSURL, type: String) {
    getDataFromUrl(url) { (data, response, error) in
        //show activity indicator
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            guard let data = data where error == nil else { return }
                self.mainImage.image = UIImage(data: data)
        }
    }
}

func getDataFromUrl(url: NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError?) -> Void)) {

    NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
        completion(data: data, response: response, error: error)
    }.resume()

}

【问题讨论】:

    标签: ios swift uitableview tableview uiactivityindicatorview


    【解决方案1】:

    你可以像下面这样,让我知道这是否适合你,你可以根据你的要求修改frame

    func downloadImage(url: NSURL, type: String) {
        let activityIndicator = UIActivityIndicatorView()
        activityIndicator.frame = self.mainImage.bounds
    
        getDataFromUrl(url) { (data, response, error) in
            //show activity indicator
            self.mainImage.addSubview(activityIndicator)
            activityIndicator.startAnimating()
            dispatch_async(dispatch_get_main_queue()) { () -> Void in
                guard let data = data where error == nil else { return }
                activityIndicator.stopAnimating()
                activityIndicator.removeFromSuperview()
                self.mainImage.image = UIImage(data: data)
            }
        }
    }
    

    【讨论】:

    • 感谢您的快速回复,这是有效的!它只是没有定位在中心位置,它向下和向右,但它正在出现。我还必须将 self.mainImage.addSubview(activityIndi​​cator) 和 activityIndi​​cator.startAnimating() 移到 getDataFromUrl 函数上方。
    • 我似乎无法正确居中你知道怎么做吗?我已经尝试过了,但它并不完全正确:activityIndi​​cator.frame = CGRect(x: 0, y: 0, width: self.mainImage.bounds.width / 2, height: self.mainImage.bounds.height / 2)
    • 您的 x,y 位置不正确,您需要将其相对于超级视图居中
    • 啊,谢谢。这似乎工作得很好:activityIndi​​cator.frame = CGRect(x: self.superview!.frame.width / 2, y: 60, width: 0, height: 0)
    • 您好像是在数据下载后添加指标。您可能需要指示正在下载图像,在这种情况下,您应该在调用 getDataFromURL 之前添加指示符。
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多