【问题标题】:How do I disable all buttons when one gets pressed in XCode?在 XCode 中按下一个按钮时如何禁用所有按钮?
【发布时间】:2015-01-02 11:29:30
【问题描述】:

如何做到这一点,以便当我在 XCode 中按下一个按钮时,其余按钮(包括按下的那个按钮)会被禁用?当然,我仍然希望该功能由按下的按钮执行。我只是不希望用户能够多次按下任何按钮,也不希望他们在已经按下第一个按钮后能够按下另一个按钮。在这种情况下,以下是我的两个按钮的 IBActions:

@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"
        }
    }
}

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    如果您还没有设置按钮的@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
            }
            // ...
        }
    }
    

    【讨论】:

    • 我已经为两个按钮设置了 IBOutlet 属性。我需要将惰性变量添加到现有的 IBOutlet 属性,还是需要完全创建新的 IBOutlet 属性?
    • 添加了一些示例代码以供参考 - 您需要根据您的班级对其进行调整。
    【解决方案2】:

    做一件事,为所有按钮赋予唯一的Tag。之后创建创建按钮的方法并使用按钮标签禁用它们

    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()
    }
    

    【讨论】:

    • 我不想问这个问题,但是您究竟如何为按钮分配标签?我很快就知道它是 button.tag = 101,如果我想将标签 101 分配给我的一个按钮,但它在我放置的任何地方都不起作用。它在 IBAction 中不起作用,那么它是 IBOutlet 吗?
    • 如果您通过界面生成器进行设计,那么您可以通过属性检查器设置标签,如果您以编程方式进行设计,那么就像您所说的 button.tag=101。
    【解决方案3】:

    最简单的方法是在顶部添加一个背景颜色为 UIColor.clearColor() 的 UIView。它是不可见的,并且可以捕获所有点击。

    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()
      }
    }
    

    【讨论】:

      【解决方案4】:
      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
      

      【讨论】:

        【解决方案5】:

        你可以循环遍历UIView中的所有子视图,看看是否是UIButton,如果是你可以禁用按钮。

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

        【讨论】:

        • 请花一点时间来解释您的代码。当你解释你的代码时,你可能会得到一个加分。
        • 编辑了答案,tks
        猜你喜欢
        • 2022-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 2021-10-08
        • 2015-02-10
        • 1970-01-01
        相关资源
        最近更新 更多