2014-11-06 94 views
2

我該如何製作,以便當我按下XCode中的一個按鈕時,剩下的按鈕(包括被按下的按鈕)變爲禁用狀態?當然,我仍然希望通過按下按鈕來執行該功能。我只是不希望用戶能夠多次按下任何按鈕,也不希望他們在按下第一個按鈕後再按下另一個按鈕。下面是我爲我的兩個按鈕IBActions在這種情況下:如何在XCode中按下某個按鈕時禁用所有按鈕?

@IBAction func addVote1(sender: AnyObject) { 

    var query = PFQuery(className: "VoteCount") 
    query.getObjectInBackgroundWithId("BiEM17uUYT") { 
     (voteCount1: PFObject!, error: NSError!) ->Void in 
     if error != nil { 
      NSLog("%@", error) 
     } else { 
      voteCount1.incrementKey("votes") 
      voteCount1.saveInBackgroundWithTarget(nil, selector: nil) 
     } 

     let votes = voteCount1["votes"] as Int 
     let votes2 = voteCount1["votes2"] as Int 
     self.pollResults1.text = "\(votes) votes     \(votes2) votes" 
     } 
    } 

@IBAction func addVote2(sender: AnyObject) { 

    var query = PFQuery(className: "VoteCount") 
    query.getObjectInBackgroundWithId("BiEM17uUYT") { 
     (voteCount1: PFObject!, error: NSError!) -> Void in 
     if error != nil { 
      NSLog("%@", error) 
     } else { 
      voteCount1.incrementKey("votes2") 
      voteCount1.saveInBackgroundWithTarget(nil, selector: nil) 
     } 

     let votes = voteCount1["votes"] as Int 
     let votes2 = voteCount1["votes2"] as Int 
     self.pollResults2.text = "\(votes) votes     \(votes2) votes" 
     } 
    } 
} 

回答

5

的按鈕設置@IBOutlet屬性,如果你有沒有準備好,然後添加一個lazy var陣列的按鈕。在按鈕處理程序中,將每個按鈕的enabled屬性設置爲false。

class ViewController { 
    @IBOutlet var button1: UIButton! 
    @IBOutlet var button2: UIButton! 

    lazy var buttons: [UIButton] = [self.button1, self.button2] 

    // ... 

    @IBAction func addVote1(sender: AnyObject) { 
     for button in self.buttons { 
      button.enabled = false 
     } 
     // ... 
    } 
} 
+0

我已經爲兩個按鈕設置了IBOutlet屬性。我是否需要將惰性var添加到現有的IBOutlet屬性中,還是需要完全創建新的IBOutlet屬性? – ansariha 2014-11-06 04:16:41

+0

添加了一些示例代碼供參考 - 您需要將其調整爲適合您的課程。 – 2014-11-06 04:17:30

1

做一兩件事,所有的按鈕提供獨特標籤。之後,創建它創建按鈕的方法和使用按鈕標記

func disableButton() 
{ 
    for tagvalue in 101...102 
    { 
     var btnTemp = self.view.viewWithTag(tagvalue) as UIButton; 
     btnTemp.enabled = false; 
    } 
} 

添加上述方法在您的按鈕,禁用它們如下面的代碼所示

@IBAction func addVote1(sender: AnyObject) 
{ 
    //Your code 
    disableButton() 
} 

@IBAction func addVote2(sender: AnyObject) 
{ 
    //Your code 
    disableButton() 
} 
+0

我不想問這個問題,但是如何將一個標籤分配給一個按鈕?我知道在swift中它的button.tag = 101,如果我想將標籤101分配給我的其中一個按鈕,但它在我放置的任何位置都不起作用。它不會在IBAction中工作,IBOutlet也是如此? – ansariha 2014-11-06 04:51:31

+0

如果您是通過界面構建​​器進行設計,那麼您可以通過屬性檢查器設置標籤,並且如果您正在以編程方式進行設計,那麼就如您所說的button.tag = 101。 – Indrajeet 2014-11-06 05:00:18

1

最簡單的方法是添加一個UIView與頂部是UIColor.clearColor()的背景顏色。它是不可見的,捕獲所有的水龍頭。

class ViewController { 
    private var uiBlocker = UIView() 

    override func viewDidLoad() { 
    uiBlocker.backgroundColor = UIColor.clearColor() 
    } 

    @IBAction func buttonAction() { 
    view.addSubView(uiBlocker) 

    [stuff you want to do] 

    uiBlocker.removeFromSuperView() 
    } 
} 
0
let subviews : NSArray = headerView.subviews as NSArray 
    for button in subviews { 

     if let button = button as? UIButton { 
      //let btn = button as! UIButton 
      button.isSelected = false 
     } 

    } 

    sender.isSelected = true 
0

您可以通過UIView的所有子視圖循環,並發現如果是一個UIButton,如果是你可以禁用按鈕。

func disableButtons() { 
     for views in view.subviews { 
      if let button = views as? UIButton { 
       button.enabled = false 
      } 
     } 
    } 
+0

請花一分鐘來解釋你的代碼。當你解釋你的代碼時,你可能會收到一個加號。 – 2016-11-17 14:28:43

+0

編輯答案,tks – 2016-11-18 16:47:20

相關問題