Как передать данные из NSTableCellView в пользовательский NSTableCellView - PullRequest
0 голосов
/ 09 марта 2020

Я вытягиваю некоторые JSON данные и отображаю их в NSTableView. Я создал собственный вид ячейки под названием «youCell». Здесь я пытаюсь получить процент для отображения загрузки. Это прекрасно работает, если бы я использовал реальный файл, которым я не являюсь. Мы используем ссылки, которые фактически инициируют загрузку файла, но это не фактический файл, поэтому он не может захватить «totalBytesExpectedToWrite».

Внутри моего объекта Product у меня есть размер файла, который я хочу использовать для замены этого значения, но я не уверен, как передать его в свое пользовательское представление ячейки. Я попытался создать переменную в моем контроллере представления и присвоить ей значение prod.product_filesize, но оно все равно всегда возвращается пустым, когда я пытаюсь получить к нему доступ в своем пользовательском представлении ячейки.

Я довольно новичок в Swift, и любые рекомендации будут с благодарностью.

import Cocoa
import Kingfisher     

class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {

@IBOutlet weak var tableView: NSTableView!

var products = [Product]()

var passFileSize = ""

struct Product: Decodable {

    let product_name:     String
    let product_image:    String
    let order_id:         String?
    let download_string:  String
    let product_link:     String?
    let validation_email: String?
    let product_filesize: String

}

func numberOfRows(in tableView: NSTableView) -> Int {
   return (products.count)
}

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

    let prod = products[row]

        if tableColumn?.identifier == NSUserInterfaceItemIdentifier(rawValue: "pNameColumn") {

            let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "nameCell")
            guard let cellView = tableView.makeView(withIdentifier: cellIdentifier, owner: self) as? NSTableCellView else { return nil }
            cellView.textField?.stringValue = prod.product_name

            return cellView

        }else if tableColumn?.identifier == NSUserInterfaceItemIdentifier(rawValue: "pFileColumn") {

            let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "pFileCell")
            guard let cellView = tableView.makeView(withIdentifier: cellIdentifier, owner: self) as? youCell else { return nil }
            cellView.textField?.stringValue = prod.product_filesize

            passFileSize = prod.product_filesize

            cellView.yourobj = {
                cellView.animateCAShapeLayerDrawing(theFile: self.urlTestString)
            }



            return cellView

        }else if tableColumn?.identifier == NSUserInterfaceItemIdentifier(rawValue: "pImageColumn") {

            let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "pImageCell")
            guard let cellView = tableView.makeView(withIdentifier: cellIdentifier, owner: self) as? NSTableCellView else { return nil }

            let stringer = prod.product_image
            let url = URL(string: stringer)
            cellView.imageView?.kf.setImage(with: url)

            return cellView

        }


    return view
}

}



class youCell: NSTableCellView, URLSessionDownloadDelegate
{


var vc = ViewController()

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    print("Finished in youCell")
}


func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {

    let newFileSize = vc.passFileSize

    print(newFileSize)

    //replace totalBytesExpectedToWrite with newFileSize

    let percentage = CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite)

    print("\(Int(percentage * 100))%")


}

1 Ответ

0 голосов
/ 09 марта 2020

См. NSTableViewDataSource протокол и внедрите:

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
...