2015-08-13 47 views
4

我有4個調用一個函數的按鈕。取決於哪個按鈕被按下,我需要隱藏在按下後調用的功能內部的按鈕。我不知道哪個按鈕被按下,所以我試圖給每個按鈕分配標籤以通過標籤和使用開關來識別它們。Swift - 確定使用開關按下哪個按鈕

I試過這種

  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 { 

另一種情況下.. }

+0

你如何從4個按鈕調用函數? –

+0

請把你的整個功能放在你已經把這段代碼放在哪裏。 – Jecky

+0

@Er。 Kukadiya updatet post –

回答

8

試試這個,

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; 
    } 

} 
3

把你的代碼中像下面所示I:

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添加標籤。

7

爲什麼你總是想用標籤來確定UIButton?如果被調用的函數有一個發送者參數,那麼你知道通過這個參數調用該函數的UIButton。

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

} 
+0

我不確定這可以解決問題,因爲他得到的錯誤消息。但是,謝謝。我學到了東西。 –

0

而是然後用您一個switch語句可以直接使用發件人。

請注意,您需要指定發件人是一個UIButton(因此,這將只在函數只從一個按鈕調用時)。

@IBAction func submitButton(sender: UIButton) { 

    /* extra code here */ 

    sender.enabled = false 

} 

這減少了代碼,並允許您添加額外的按鈕,無需更改代碼。

1

我知道這個問題已經得到解答,但是如果你在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的。

這是非常直接的,你不必擔心標籤或更改名稱。