【问题标题】:Swift - determine which button was pressed with switchSwift - 确定使用开关按下了哪个按钮
【发布时间】:2015-08-13 10:10:27
【问题描述】:

我有 4 个按钮调用一个功能。根据按下的按钮,我需要在按下后调用的函数内隐藏按钮。我不知道按下了哪个按钮,所以我尝试为 4 个按钮中的每一个分配标签,以通过标签识别它们并使用开关

我试过了

            switch sender.tag {
            case 1:
                self.button1.hidden = true
            case 2:
                self.button2.hidden = true
            case 3:
                self.button3.hidden = true
            case 4:
                self.button4.hidden = true

            }

但这不起作用编译器说明使用未解析的标识符“发件人”

如何正确地做到这一点?

编辑:

整个函数

  if self.allowMistakeVar {

        let mistakeAlert = UIAlertController(title: "Here is title!", message: "message of alert", preferredStyle: .Alert)
        let okay = UIAlertAction(title: "OK", style: .Cancel) { UIAlertAction in

            self.allowMistakeVar = false
            self.allowMistakeButton.enabled = false


            switch sender.tag {
            case answer1Text:
                self.answer1Text.hidden = true
            case answer2Text:
                self.answer2Text.hidden = true
            case answer3Text:
                self.answer3Text.hidden = true
            case answer4Text:
                self.answer4Text.hidden = true

            }

        }

        mistakeAlert.addAction(okay)
        self.presentViewController(mistakeAlert, animated: true, completion: nil )

    } else {

另一种情况.. }

【问题讨论】:

  • 如何从4个按钮调用函数?
  • 请在您放置此代码的位置显示您的整个函数。
  • @Er。库卡迪亚更新帖子
  • @Poql 按下按钮后我检查标题是否等于变量 A。如果不是,我调用函数在其中检查另一个变量 B 是真还是假,如果真我需要隐藏被按下的按钮
  • 为什么总是要使用标签来确定 UIButton ?如果被调用函数有sender参数,那么通过这个参数就知道调用函数的UIButton了

标签: ios swift switch-statement


【解决方案1】:

试试这个,

1) 为每个按钮分配标签

Button1.tag=1
Button2.tag=2
Button3.tag=3
Button4.tag=4

2) 然后检查你常用的按钮操作

func buttonClicked(sender: UIButton)
{
   switch sender.tag {
   case 1: self.sender.hidden = true //button1
           break;
   case 2: self.sender.hidden = true //button2
           break;
   case 3: self.sender.hidden = true //button3
           break;
   case 4: self.sender.hidden = true //button4
           break;
   default: ()
           break;
   }

}

【讨论】:

    【解决方案2】:

    为什么总是要使用标签来确定 UIButton ?如果被调用的函数有sender参数,那么通过这个参数就知道调用函数的UIButton了。

    func buttonClicked(sender: UIButton)
    {
       switch sender {
       case button1: // Do something
       case button2: // Do some other stuff
       ...
       default: ()
       }
    
    }
    

    【讨论】:

    • 我不确定这是否能解决问题,因为他收到了错误消息。不过谢谢。我学到了一些东西。
    【解决方案3】:

    将你的代码如下所示:

    func btnSomeButtonClicked(sender: UIButton)
    {
    let tag = sender.tag;
           //put your same code here and either use tag variable as i shown or put as you did.
    }
    

    -->因此,您将轻松获得发件人的财产。

    -->还要检查你没有忘记给 UIButtons 打标签。

    【讨论】:

      【解决方案4】:

      我知道这个问题已经得到解答,但是如果你在 IB 中设置了这个,那么我建议你使用 @IBOutlet 变量作为案例来检查按钮是否被按下。

      class SomeView: UIView {
          @IBOutlet weak var buttonA: UIButton!
          @IBOutlet weak var buttonB: UIButton!
          @IBOutlet weak var buttonC: UIButton!
      
          @IBAction func didHitButton(_ sender: UIButton) {
              switch sender {
              case buttonA:
                  doThis()
              }
              case buttonB:
                  doThat()
              }
              case buttonC:
                  doThisAgain()
              }
              default:
                  doNothing()
              }
          }
          ...
      }
      

      现在您将 NIB 中的按钮连接到每个 @IBOutlet,并将所有按钮连接到一个 @IBAction didHitButton。

      这很简单,您不必担心标签或更改名称。

      【讨论】:

        【解决方案5】:

        然后使用 switch 语句,您可以直接使用发送者。

        请注意,您需要将发送者指定为 UIButton(因此这仅在仅从按钮调用该函数时才有效)。

        @IBAction func submitButton(sender: UIButton) {
        
            /* extra code here */
        
            sender.enabled = false
        
        }
        

        这减少了代码,还允许您在不更改代码的情况下添加额外的按钮。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-11
          • 1970-01-01
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 2016-06-16
          相关资源
          最近更新 更多