iOS:不同视图控制器中的进度条

时间:2016-08-31 06:28:17

标签: ios swift file-upload nsurlsession uiprogressview

我有2个视图控制器。在父视图中,我有一个进度视图。在子VC中,我使用POST请求将带有参数的图像上传到服务器,然后解除该VC并因此返回到父VC,我希望进度View在上载发生时更新。我尝试过protocol-delegate方法,但看起来它只能工作一次并且无法动态返回值。我尝试在两个视图控制器中实现以下方法,但没有成功。

    func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {

    self.progressView.hidden = false
    self.uploadProgress = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
    print(self.uploadProgress)
    self.progressView.setProgress(self.uploadProgress, animated: true)

    if (uploadProgress == 1.0) {
        self.progressView.hidden = true
//            uploadProgress = 0.0
    }
}

1 个答案:

答案 0 :(得分:0)

查看KVO(键值观察)并观察您的self.uploadProgress。每次self.uploadProgress更改时,都会调用一个函数,然后您就可以执行任何操作。确保在想要显示进度条的VC上添加观察者(函数)。

例如在ParentVC中:

[childVC addObserver:self forKeyPath:@"uploadProgress" options: NSKeyValueObservingOptionNew context:NULL];

然后:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if ([keyPath isEqualToString:@"uploadProgress"]) {
        NSLog(@"Updated Value:%@",[change objectForKey:NSKeyValueChangeNewKey]);
        //Do something
    }
}

每次uploadProgress属性更改时都会调用observeForValue。

如果您不需要观察员或者ChildVC将被销毁,请不要忘记删除观察者。

-(void)dealloc {

    [self removeObserver:parentVC forKeyPath:@"uploadProgress"];
}