Swift-使用 if 语句检查在不同类中选择了哪个按钮

Posted

技术标签:

【中文标题】Swift-使用 if 语句检查在不同类中选择了哪个按钮【英文标题】:Swift- Check which button is selected in different class using if-statement 【发布时间】:2020-02-12 08:56:26 【问题描述】:

我有 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)
            
        

    

有没有人知道我该如何处理这个问题?现在因为我在按钮 func 中添加了 tagVal,所以 yearOne aka mainvc 似乎没有成员。

【问题讨论】:

【参考方案1】:

您需要在 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 无关。

【讨论】:

以上是关于Swift-使用 if 语句检查在不同类中选择了哪个按钮的主要内容,如果未能解决你的问题,请参考以下文章

UISwipeGestureRecognizer 在不应该执行的 if/else 语句中执行

哪一个更高性能:使用Swift Array.contains函数或使用if(.. || .. || ..)进行检查?

VBA 如何确定在列表框中选择了哪一行?

iOS swift 条件编译语句

设计模式最佳套路—— 愉快地使用策略模式

swift - if 语句和数组