Swift - проверка, какая кнопка выбрана в другом классе, с помощью оператора if - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть 4 разные кнопки, которые ведут к одному контроллеру вида SearchPage(), поэтому я назначил эти кнопки в основной класс yearOne следующим образом:

class yearOne: UICollectionViewController:

    @objc func buttonAction(sender: UIButton!) {
        var tagVal : NSInteger = sender.tag
        switch sender.tag {
        case 0:
            print("ONEEE")
            let destination = SearchPage()
            navigationController?.pushViewController(destination, animated: true)
        case 1:
            print("TWOOO")
            let destination = SearchPage()
            navigationController?.pushViewController(destination, animated: true)
        case 2:
            print("THREEE")
            let destination = SearchPage()
            navigationController?.pushViewController(destination, animated: true)
        case 3:
            print("FOURRR")
            let destination = SearchPage()
            navigationController?.pushViewController(destination, animated: true)
        default:
            let destination = SearchPage()
            navigationController?.pushViewController(destination, animated: true)
        }

    }

каждая из кнопок находится в разных классах

class fallQuarterCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource:

    let addButton : UIButton = {
        let button = UIButton()//frame: CGRect(x: 345, y: 10, width: 30, height: 30))
        button.setImage(UIImage(named: "addicon"), for: .normal)
        button.imageEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
        button.tag = 0
        button.addTarget(self, action: #selector(yearOne.buttonAction), for: .touchUpInside)
        return button
    }()

class winterQuarterCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource:

    let addButton : UIButton = {
        let button = UIButton()//frame: CGRect(x: 345, y: 10, width: 30, height: 30))
        button.setImage(UIImage(named: "addicon"), for: .normal)
        button.imageEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
        button.tag = 1
        button.addTarget(self, action: #selector(yearOne.buttonAction), for: .touchUpInside)
        return button
    }()

и так далее с третьим и четвертые кнопки. В любом случае кнопка работает, и каждый из них правильно распечатывается и отправляет меня в SearchPage()

Однако в моем классе SearchPage() я пытаюсь вспомнить sender.tag ?? так что я могу использовать оператор if / else, для которого была нажата / выбрана кнопка.

    let mainvc = yearOne()
    let vc = fallQuarterCell()
    let vc2 = winterQuarterCell()
    let vc3 = springQuarterCell()
    let vc4 = summerQuarterCell()

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

        tableView.deselectRow(at: indexPath, animated: true)

        if (mainvc.tagValue == 0){
            if (resultSearchController.isActive){

                vc.data.append(filteredCourses[indexPath.row])
                UserDefaults.standard.set(vc.data, forKey: "SavedArray")

                navigationController?.popViewController(animated: true)

            }
            else{
                vc.data.append(allCourses[indexPath.row] as! String)
                UserDefaults.standard.set(vc.data, forKey: "SavedArray")

                navigationController?.popViewController(animated: true)

            }
        }
        else if (mainvc.tagValue == 1){
            if (resultSearchController.isActive){
                vc2.data.append(filteredCourses[indexPath.row])
                UserDefaults.standard.set(vc2.data, forKey: "SavedArray2")
                vc2.tableView.reloadData()
                navigationController?.popViewController(animated: true)
            }
            else{
                vc2.data.append(allCourses[indexPath.row] as! String)
                UserDefaults.standard.set(vc2.data, forKey: "SavedArray2")
                vc2.tableView.reloadData()
                navigationController?.popViewController(animated: true)
            }
        }

    }

Кто-нибудь знает, как мне подойти к этому? Прямо сейчас, поскольку я добавил tagVal внутри кнопки fun c, yearOne aka mainvc, похоже, не имеет члена.

1 Ответ

1 голос
/ 12 февраля 2020

Вам нужно установить значение в вашем контроллере представления SearchPage для захвата тега.

class SearchPage: UIViewController {
  var tag: Int?
  ...
}

Затем в вашем операторе switch вы должны сделать что-то вроде этого.

case 0:
  print("ONEEE")
  let destination = SearchPage()
  destination.tag = sender.tag // <- update the tag value here
  navigationController?.pushViewController(destination, animated: true)

Вы также следует удалить let mainVC = yearOne(), так как это новый экземпляр класса yearOne и не имеет отношения к предыдущему yearOne, который вы создали.

...