【问题标题】:tap to select uibutton then tap to deselect uibutton点击以选择 uibutton 然后点击以取消选择 uibutton
【发布时间】:2016-10-31 05:16:27
【问题描述】:

您好,我正在尝试实现以下内容

点击 uibutton 选择并突出显示背景,然后再次点击相同的按钮将 uibutton 背景取消选择为原始状态或其他颜色

我的代码如下:

@IBOutlet weak var case4Btn: UIButton!

@IBAction func case4BtnClicked(sender: AnyObject) { //touch up inside
    case4Btn.backgroundColor = UIColor.cyanColor()
}
@IBAction func case4BtnCancel(sender: AnyObject) {
    case4Btn.backgroundColor = UIColor.lightGrayColor()//touch down
}

当我点击一次选择并突出显示 UIButton 按钮时使用以下代码,当我再次点击它会更改颜色但不会取消选择,为了让我取消选择,我必须点击、按住并拖离按钮改变颜色或恢复原状

请帮忙,因为这让我发疯,看起来如此简单的事情似乎如此困难

提前谢谢你

【问题讨论】:

    标签: ios uibutton swift2 xcode7 selected


    【解决方案1】:

    解决方案 1

    通过代码或InterfaceBuilder 设置按钮的两种/所有状态的颜色、文本、文本颜色,如下所示

    button.setBackgroundImage(UIImage(named: "cyanColorImage"), forState: .Normal)
    button.setBackgroundImage(UIImage(named: "brownColorImage"), forState: .Selected)
    

    并处理目标并仅更改按钮的状态

    @IBAction func buttonClickedHandle(sender: UIButton)
    {
        sender.selected = !sender.selected
    }
    

    解决方案 2

    您可以在没有额外变量的情况下做到这一点。实现这一目标

    • 您可以使用按钮的selected 属性来实现您的要求。
    • 您还可以使用单个属性处理按钮样式。
    • 您不需要为您需要的所有按钮编写单独的方法。只需为所有人​​编写一个方法。

      @IBAction func buttonClickedHandle(sender: UIButton)
      {
          if sender.selected
          {
              sender.backgroundColor = UIColor.cyanColor()
          }
          else
          {
              sender.backgroundColor = UIColor.lightGrayColor()
          }
      
          sender.selected = !sender.selected
      }
      

    将所有按钮的目标添加到buttonClickedHandle 并以sender 访问该特定按钮。您正在为所有按钮执行相同的任务,那么为什么不按照说明重用代码。

    一切顺利!

    【讨论】:

      【解决方案2】:

      1 个按钮

      var buttonState = "cyan"
      //the color the button should be when pressed
      
      @IBOutlet weak var case4Btn: UIButton!
      //the button
      
      @IBAction func case4BtnClicked(sender: AnyObject) {
          //touch up inside
          if(buttonState == "cyan"){
              //if the button is supposed to be cyan
              case4Btn.backgroundColor = UIColor.cyanColor()
              //set the background color
              buttonState = "gray"
              //set it to be gray next time
          }
          else{
              //if it isn't
              case4Btn.backgroundColor = UIColor.grayColor()
              //set the background color
              buttonState = "cyan"
              //make it become cyan next time
          }
      }
      

      对于多个按钮

      var button1State = "cyan"
      var button2State = "cyan"
      var button3State = "cyan"
      //the color the buttons should be when pressed
      
      @IBOutlet weak var case4Btn1: UIButton!
      @IBOutlet weak var case4Btn2: UIButton!
      @IBOutlet weak var case4Btn3: UIButton!
      //the buttons
      
      @IBAction func case4Btn1Clicked(sender: AnyObject) {
          //touch up inside
          if(button1State == "cyan"){
              //if the button is supposed to be cyan
              case4Btn1.backgroundColor = UIColor.cyanColor()
              //set the background color
              button1State = "gray"
              //set it to be gray next time
          }
          else{
              //if it isn't
              case4Btn1.backgroundColor = UIColor.grayColor()
              //set the background color
              button1State = "cyan"
              //make it become cyan next time
          }
      }
      @IBAction func case4Btn2Clicked(sender: AnyObject) {
          //touch up inside
          if(button2State == "cyan"){
              //if the button is supposed to be cyan
              case4Btn2.backgroundColor = UIColor.cyanColor()
              //set the background color
              button2State = "gray"
              //set it to be gray next time
          }
          else{
              //if it isn't
              case4Btn2.backgroundColor = UIColor.grayColor()
              //set the background color
              button2State = "cyan"
              //make it become cyan next time
          }
      }
      @IBAction func case4Btn3Clicked(sender: AnyObject) {
          //touch up inside
          if(button3State == "cyan"){
              //if the button is supposed to be cyan
              case4Btn3.backgroundColor = UIColor.cyanColor()
              //set the background color
              button3State = "gray"
              //set it to be gray next time
          }
          else{
              //if it isn't
              case4Btn3.backgroundColor = UIColor.grayColor()
              //set the background color
              button3State = "cyan"
              //make it become cyan next time
          }
      }
      

      【讨论】:

      • skunkmb 非常感谢你,你不知道我已经尝试了多久,很有魅力:)
      • @Omar 没问题!你能把我的答案标记为正确吗?
      • 抱歉@skunkmb 最后一个问题,如果我想在同一页面上对多个 UIButton 应用相同的操作,我该怎么做,我尝试使用各种按钮复制您的答案,但它显示了一个错误要求我删除每个 UIButtons 开头的“@IBOutlet”
      • 道歉忽略我的最后一次我想通了再次感谢
      • 我看不出这与我的代码有什么显着不同...而且最好跟踪 state 而不是容易出错的文字字符串。
      【解决方案3】:

      唯一合法的手势是 Touch Up Inside。完全删除您的其他操作。使用 Bool 属性来跟踪按钮所处的状态。当它被点击时,使用if 语句根据 Bool 属性更改按钮的背景颜色 - 并更改 Bool 属性以匹配新状态。

      @IBOutlet weak var case4Btn: UIButton!
      var gray = true
      @IBAction func case4BtnClicked(sender: AnyObject) { //touch up inside
          if gray {
              case4Btn.backgroundColor = UIColor.cyanColor()
          } else {
              case4Btn.backgroundColor = UIColor.lightGrayColor()
          }
          gray = !gray
      }
      

      【讨论】:

      • 谢谢马特,我是 Xcode 的新手,需要一些关于如何实施上述建议的指示
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多