Использование расширения для доступа к CollectionView в отдельном классе - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть класс PickerFilterClass, который обращается к библиотеке YNDropDownView, и там я создаю представление выбора в расширении PickerFilterClass.Я хочу, чтобы сборщик помог отсортировать коллекцию в другом классе с именем RestaurantDetails.Я пытаюсь использовать функцию didselect для средства выбора для выбора, чтобы получить доступ к представлению коллекции, называемому productCollection, и перезагрузить данные, когда пользователь выбирает строку.Вот как я пытаюсь это сделать:

Класс PickerFilter

class PickerFilterClass: YNDropDownView {


    @IBOutlet var pickerView: UIPickerView!
    var rotationAngle: CGFloat!
    var filteredProducts = [Product]()
    var products = [Product]()
    let prodCollection: RestaurantDetails

let sections = [["Burgers", "Fries", "Cola", "Chicken", "Sides"],["Breakfast", "Lunch", "Dinner"]]


    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor.white
        self.initViews()



    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.initViews()


    }


    @IBAction func confirmButtonClicked(_ sender: Any) {
        self.normalSelected(at: 1)
        self.hideMenu()
    }
    @IBAction func cancelButtonClicked(_ sender: Any) {
//        self.changeMenu(title: "Changed", at: 1)
//        self.changeMenu(title: "Changed", status: .selected, at: 0)
        self.alwaysSelected(at: 1)
//        self.alwaysSelected(at: 2)
//        self.alwaysSelected(at: 3)
        self.hideMenu()

    }

    override func dropDownViewOpened() {
        print("Open Menu")


    }

    override func dropDownViewClosed() {
        print("Close Menu")
    }

    func initViews() {


    }



}

extension PickerFilterClass: UIPickerViewDataSource, UIPickerViewDelegate {



    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 2
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return sections[component].count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        pickerView.sizeToFit()
        return sections[component][row]
    }

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let view = UIView()
        view.frame = CGRect(x: 10, y: 20, width: 300, height: 52)

        let label = UILabel()
        label.frame = CGRect(x: 0, y: 0, width: 300, height: 52)
        label.textAlignment = .center
        label.font = UIFont(name: "Tiny.Toon", size: 11)
        label.textColor = UIColor.purple
        label.text = sections[component][row]
        view.addSubview(label)

        // view rotation
//        view.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180))



        return view
    }

Я пытаюсь использовать окно выбора для доступа к представлению этой коллекции здесь:

  func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            print(sections[row])

            if sections.count > row {
                let selectedUsage = sections[component][row].lowercased()
                if (selectedUsage == RestaurantDetails.allProductIdentifier.lowercased()) {
                    filteredProducts = products
                } else {
                    filteredProducts = products.filter { ($0.usage?.lowercased() ?? "") == selectedUsage }
                }
                self.prodCollection.productCollection.reloadData()
            }
        }


    }
...