Как добавить предупреждающее сообщение с помощью alertcontroller? - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю над приложением с открытым исходным кодом, используя Xcode 9.3.1 Swift 4. Есть кнопка воспроизведения.Когда пользователь нажимает кнопку воспроизведения, аудиофайл загружается автоматически до начала воспроизведения.Я хочу добавить предупреждающее сообщение, которое предупреждает пользователя, показывает размер файла и позволяет ему принять или не продолжать загрузку.

Вот мой код audiobarview.xib:

import GenericDataSources
import QueuePlayer
import UIKit

internal protocol AdvancedAudioOptionsViewControllerDelegate : AnyObject {
    internal func advancedAudioOptionsViewController(_ controller: AdvancedAudioOptionsViewController, finishedWith options: AdvancedAudioOptions)
}

internal class AdvancedAudioOptionsViewController : UIViewController, UIGestureRecognizerDelegate {
    weak internal var delegate: AdvancedAudioOptionsViewControllerDelegate?

    @IBOutlet weak internal var tableView: UITableView!
    @IBOutlet weak internal var contentView: UIView!
    @IBOutlet weak internal var bottomConstraint: NSLayoutConstraint!
    @IBOutlet weak internal var navigationBar: UINavigationBar!

    lazy internal var playButton: UIButton { get set }

    internal init(options: AdvancedAudioOptions)

    required internal init?(coder aDecoder: NSCoder)

    override internal func viewDidLoad()
    override internal func viewDidAppear(_ animated: Bool)
    override internal func viewDidLayoutSubviews()

    @IBAction internal func playButtonTapped(_ sender: Any)
    @IBAction internal func dismissView(_ sender: Any)

    internal func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
}

extension UIView {
    internal func round(corners: UIRectCorner, radius: CGFloat)
}

Вот код audiofilesdownloader.swift:

import BatchDownloader
import PromiseKit

class AudioFilesDownloader {
    let audioFileList: QariAudioFileListRetrieval
    let downloader: DownloadManager
    let ayahDownloader: AnyInteractor<AyahsAudioDownloadRequest, DownloadBatchResponse>

    private var response: DownloadBatchResponse?

    init(audioFileList: QariAudioFileListRetrieval,
         downloader: DownloadManager,
         ayahDownloader: AnyInteractor<AyahsAudioDownloadRequest, DownloadBatchResponse>) {
        self.audioFileList  = audioFileList
        self.downloader     = downloader
        self.ayahDownloader = ayahDownloader
    }

    func cancel() {
        response?.cancel()
        response = nil
    }

    func needsToDownloadFiles(qari: Qari, range: VerseRange) -> Bool {
        let files = filesForQari(qari, range: range)

        return !files.filter { !FileManager.documentsURL.appendingPathComponent($0.destinationPath).isReachable }.isEmpty
    }

    func getCurrentDownloadResponse() -> Promise<DownloadBatchResponse?> {
        if let response = response {
            return Promise(value: response)
        } else {
            return downloader.getOnGoingDownloads().then { batches -> DownloadBatchResponse? in
                let downloading = batches.first { $0.isAudio }

                self.createRequestWithDownloads(downloading)

                return self.response
            }
        }
    }

    func download(qari: Qari, range: VerseRange) -> Promise<DownloadBatchResponse?> {
        return ayahDownloader
            .execute(AyahsAudioDownloadRequest(range: range, qari: qari))
            .then(on: .main) { responses -> DownloadBatchResponse? in
                // wrap the requests
                self.createRequestWithDownloads(responses)

                return self.response
            }
    }

    private func createRequestWithDownloads(_ batch: DownloadBatchResponse?) {
        guard let batch = batch else { return }

        response = batch
        response?.promise.always { [weak self] in
            self?.response = nil
        }
    }

    func filesForQari(_ qari: Qari, range: VerseRange) -> [DownloadRequest] {
        return audioFileList.get(for: qari, range: range).map {
            DownloadRequest(url: $0.remote, resumePath: $0.local.stringByAppendingPath(Files.downloadResumeDataExtension), destinationPath: $0.local)
        }
    }
}

1 Ответ

0 голосов
/ 31 марта 2019

Предполагая, что у вас есть размер файла как переменная filesize

Swift 4:

let alert = UIAlertController(title: "Proceed with download?", message: "File size: \(filesize)", preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: {(alert: UIAlertAction!) in
            // Leave empty, dismisses the alert
        }))

        alert.addAction(UIAlertAction(title: "Download Song", style: .default, handler: {(alert: UIAlertAction!) in
            // Code to download song
        }))

        self.present(alert, animated: true, completion: nil)
...