【问题标题】:Switch case in swift快速切换案例
【发布时间】:2016-11-08 09:55:47
【问题描述】:

这些是我的UIButtons

@IBOutlet weak var btnProgressDate: UIButton!
@IBOutlet weak var btnClosedDate: UIButton!

我已将这两个按钮拖动为:

@IBAction func btnClicked(sender: UIButton) {
    let tag = sender.tag
    self.clearPopups()
    switch (tag) {
            case 1:
        self.datePicker.hidden = false
        self.datePicker.datePicker.maximumDate = nil
        self.datePicker.datePicker.minimumDate = nil

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.maximumDate = self.healthActionPlanCondition.dateClosed
        }
        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.nextProgressReviewDate, animated: true)
        }
        self.selectedBtn = self.btnProgressDate
    case 2:
        self.datePicker.hidden = false
        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.minimumDate = self.healthActionPlanCondition.nextProgressReviewDate
        }

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.dateClosed, animated: true)
        }
        self.datePicker.datePicker.maximumDate = nil
        self.selectedBtn = self.btnClosedDate
    default:
        print("Proper btn not found")
    }


}

但是每次我点击任何一个按钮default都会被执行。我对 Swift 完全陌生。我在这里做错了什么??

【问题讨论】:

  • 你打印按钮标签了吗?
  • 最初我设置为标签 0

标签: ios swift uibutton switch-statement


【解决方案1】:

我确信这很明显,但您是否真的为按钮设置了标签属性?你的代码在我看来完全没问题,所以我想不出你看到这个问题的任何其他原因。

【讨论】:

  • 只是对此的评论。在此行之后的快速print(tag)let tag = sender.tag 应该让您看到tag 的实际值是什么。由于@jacob-king 上面建议的原因,我猜它会是 0。
  • 最初标签设置为0
  • 嗯,这是你的问题,标签是 0,但你正在检查它是 1 还是 2。它的 0 所以默认值被击中。
  • 如果按钮在情节提要中,请在属性检查器中更改其标签属性,如果它们是程序化的,请在代码中设置它们。
【解决方案2】:

代替使用tag,在您的操作方法中可以使用您以这种方式创建的UIButton 中的IBOutlet

@IBAction func btnClicked(sender: UIButton) {
    self.clearPopups()
    if sender == btnProgressDate {
        self.datePicker.hidden = false
        self.datePicker.datePicker.maximumDate = nil
        self.datePicker.datePicker.minimumDate = nil

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.maximumDate = self.healthActionPlanCondition.dateClosed
        }
        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.nextProgressReviewDate, animated: true)
        }
        self.selectedBtn = self.btnProgressDate
    }
    else if sender == btnClosedDate {
        self.datePicker.hidden = false
        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.minimumDate = self.healthActionPlanCondition.nextProgressReviewDate
        }

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.dateClosed, animated: true)
        }
        self.datePicker.datePicker.maximumDate = nil
        self.selectedBtn = self.btnClosedDate
    }
    else {
        print("Proper btn not found")
    }
}    

【讨论】:

  • 为什么我不能给按钮设置不同的日期?这让我可以在两个按钮中输入相同的日期
  • @Nirojthapa 你能解释更多吗,不明白你想说的是什么。
  • @Nirojthapa 欢迎朋友 :)
【解决方案3】:
@IBAction func btnClicked(sender: UIButton) {
    self.clearPopups()
    switch sender {
    case btnProgressDate:
        self.datePicker.hidden = false
        self.datePicker.datePicker.maximumDate = nil
        self.datePicker.datePicker.minimumDate = nil

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.maximumDate = self.healthActionPlanCondition.dateClosed
        }

        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.nextProgressReviewDate, animated: true)
        }
        self.selectedBtn = self.btnProgressDate
    case btnClosedDate:
        self.datePicker.hidden = false
        if(self.healthActionPlanCondition.nextProgressReviewDate != nil)
        {
            self.datePicker.datePicker.minimumDate = self.healthActionPlanCondition.nextProgressReviewDate
        }

        if(self.healthActionPlanCondition.dateClosed != nil)
        {
            self.datePicker.datePicker.setDate(self.healthActionPlanCondition.dateClosed, animated: true)
        }
        self.datePicker.datePicker.maximumDate = nil
        self.selectedBtn = self.btnClosedDate
    default:
        print("Proper btn not found")
    }


}

【讨论】:

    【解决方案4】:

    您不需要最初设置标签 0。只需为第一个按钮设置标签 1,为第二个按钮设置标签 2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多