显示UITableViewCell中多个图像上传的进度指示器
我有UITableView与自定义单元格。我想显示多个图片上传的进度指示器。显示UITableViewCell中多个图像上传的进度指示器
我试过reloadRowAtIndexPath方法的UITableView,但它不是足够的解决方案,因为细胞不断闪烁,这看起来很奇怪。
另一种解决方案,我发现是放置在的UITableViewCell在全局变量然后修改它外面的UITableView数据源的方法我的进度指示器视图的存储参考,但在该溶液中我面临一个问题,就是我必须保持跟踪UITableViewCell的多个进度指示器视图对象,这很难,因为UITableView数据源是二维的NSMutableArray(数组中的简短数组),所以我没有独特的IndexPath.row因为有多个节。那么我如何管理进度指标视图的对象呢?
还有没有更好的解决方案来做这种工作?
这里我应用的解决方案可能对需要相同实现的人有所帮助,而不需要使用第三方库或类。
我已经创建了一个自定义UIView
并使用CALayer
和一些动画设计循环进度指示器。这不是什么大不了的事。但是对我来说很难的事情是我想要在几个单元格中显示多个图像进度百分比的进度指示器。
所以我已经创建了一个属性自定义类像
@property (nonatomic,retain) NSIndexPath *indexPath;
@property (nonatomic,strong) NSURLSessionTask *uploadtask;
然后,我保持一个NSMutableArray
其中含有对每个uploadTask值目前上传图片我的自定义类对象和合并包含indexPath字符串。现在我已经跟踪了我的所有上传图片,所以我通过索引路径值帮助我更改了自定义进度指示器UIView中的上传百分比,只要我收到NSURLSession
代表方法的响应。
你好@Dhaval Dobariya你能帮我解决这个问题吗https://stackoverflow.com/q/46047271/2910061? – ilesh
好吧,所以这里是我在其中一个项目中使用的东西,当我找不到其他东西时。
斯威夫特3
使子类的NSObject的(因为一个子类URLSession不会让你设置的配置和其他参数作为唯一指定初始化有的init()),它包含的信息像在IndexPath中一样启动上载过程的单元以及一个URLSession对象。
每当你想上传时(使用URLSession的uploadTask方法),使用这个子类来创建新的URLSession。
创建uploadTask并开始上传。
您还必须制作自己的协议方法,这些方法由URLSession的常规协议方法调用,以将自定义子类而不是URLSession对象发送给所需的委托。
然后在该委托中,您可以检查存储在您从上一步获得的自定义子类中的indexPath的信息,并更新相应的单元格。
通过使用通知我可以实现同样的效果。
下面是我写的示例应用程序的截图:
public class TestURLSession:NSObject, URLSessionTaskDelegate {
var cellIndexPath:IndexPath!
var urlSession:URLSession!
var urlSessionUploadTask:URLSessionUploadTask!
var testUrlSessionDelegate:TestURLSessionTaskDelegate!
init(configuration: URLSessionConfiguration, delegate: TestURLSessionTaskDelegate?, delegateQueue queue: OperationQueue?, indexPath:IndexPath){
super.init()
self.urlSession = URLSession(configuration: configuration, delegate: self, delegateQueue: queue)
self.cellIndexPath = indexPath
self.testUrlSessionDelegate = delegate
}
func uploadTask(with request: URLRequest, from bodyData: Data) -> URLSessionUploadTask{
let uploadTask = self.urlSession.uploadTask(with: request, from: bodyData)
self.urlSessionUploadTask = uploadTask
return uploadTask
}
public func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64){
self.testUrlSessionDelegate.urlSession(self, task: self.urlSessionUploadTask, didSendBodyData: bytesSent, totalBytesSent: totalBytesSent, totalBytesExpectedToSend: totalBytesExpectedToSend)
}
}
protocol TestURLSessionTaskDelegate : URLSessionDelegate {
func urlSession(_ session: TestURLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
}
编辑们的欢迎。
使用URLSessionTaskDelegate方法,并做必要的计算:
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
我也有类似的东西做在那里,我想下载的文件,并显示进度条。我的想法是创建一个Custom对象,用于跟踪特定的下载,并且所有单元将内部侦听此对象中的更改。每个单元都有自己的对象,由任务标识符唯一标识。我已经写在斯威夫特3提供的样本代码在下面的链接(骨架代码还增加)
class DownLoadData: NSObject {
var fileTitle: String = ""
var downloadSource: String = ""
var downloadTask: URLSessionDownloadTask?
var taskResumeData: Data?
var downloadProgress: Float = 0.0
var isDownloading: Bool = false
var isDownloadComplete: Bool = false
var taskIdentifier: Int = 0
var groupDownloadON:Bool = false
var groupStopDownloadON:Bool = false
init(with title:String, and source:String){
self.fileTitle = title
self.downloadSource = source
super.init()
}
func startDownload(completion:@escaping (Result<Bool, Error>)->Void,progressHandler:@escaping (Float)->Void){
}
func resumeDownload(completion:@escaping (Result<Bool, Error>)->Void,progressHandler:@escaping (Float)->Void){
}
func pauseDownload(){
}
func stopDownload(){
if self.isDownloading{
}
}
func cleanUpHandlers(){
// remove the completion handlers from the network manager as resume is taken as a new task.
}
func handleDownloadSuccess(){
}
func handleDownloadError(){
}
}
多张图片上传,什么ü通过它的意思是,你下载或上传图片到服务器 – ChenSmile
我正在使用API将图像上传到服务器。 –
您是否使用AFNetworking上传图片? –