【问题标题】:Have to press twice for Swift 3 button action必须按两次才能进行 Swift 3 按钮操作
【发布时间】:2017-07-28 20:28:22
【问题描述】:

我有两个单选按钮,每个按钮都有自己的IBAction。第一个表现完美。第二个具有 if-else 条件并且不响应第一次点击,但随后响应每个点击。通过查看类似的问题,我感觉到第一次点击只是在执行操作之前评估我的功能,但我无法找到让按钮在第一次点击时做出响应的方法。

@IBAction func radioSchedule(_ sender: Any) {
         print(timePicker.isHidden)

        if timePicker.isHidden == true {

            timePicker.isHidden = false
            hideButton.isHidden = true
            timeView.isHidden = false
            itemTypeField.text = "Schedule"
            saveButton.isHidden = false

        } else {
            timePicker.isHidden = true
            timeView.isHidden = true
        }
        }

【问题讨论】:

  • 第一次点击时,您是否在调试控制台中看到来自print(timePicker.isHidden) 的任何输出?
  • 是的,我是。拾取器是隐藏的,但控制台说是假......然后在拾取器出现时的第二个水龙头上真实。 span>
  • @JWHall ^ 所以,这很有趣。让我们评估一下。按钮似乎工作正常...您最初在哪里/如何将timePicker 设置为隐藏?
  • 最初,我在 viewDidLoad 的顶部执行此操作,但我删除了它,对 timePicker.isHidden 的唯一引用是作为插座,然后在 IBAction 中。

标签: ios button swift3


【解决方案1】:

我的猜测是您的 timePicker 位于您的 timeView 内,而 timeView 最初是隐藏的,但您的 timePicker 不是,这就是导致您的问题的原因。

如果是这样,您可以通过判断您的if/else 与您的timeView 来解决此问题,然后您甚至不必担心将timePicker 设置为隐藏与否。

即:

@IBAction func radioSchedule(_ sender: Any) {

        print(timeView.isHidden)

        if timeView.isHidden {

            hideButton.isHidden = true
            timeView.isHidden = false
            itemTypeField.text = "Schedule"
            saveButton.isHidden = false

        } else {
            timeView.isHidden = true
        }
  }

【讨论】:

  • 谢谢威廉!这解决了它。我的逻辑问题是我试图用同一个 else 块做两件事,是我试图在另一件事中做一件事,还是完全是别的事情?
  • 没有。您的问题是您试图判断 timePicker 是否隐藏,但 timePicker 最初从未隐藏...只有它所在的视图被隐藏 - timeView
【解决方案2】:

看起来像设置timepicker.ishidden 是造成问题修改你的代码是这样的:-

@IBAction func radioSchedule(_ sender: Any) {
  print(timePicker.isHidden)
  //Here updating the isHidden property first. If its false then initially will set to true.
  timePicker.isHidden = !timePicker.isHidden
  if timePicker.isHidden == true {
    hideButton.isHidden = true
    timeView.isHidden = false
    itemTypeField.text = "Schedule"
    saveButton.isHidden = false
   } else {
        timeView.isHidden = true
      }
  }

【讨论】:

  • 这里 timePicker 会立即弹出。但是 else 条件永远不会触发,所以我无法在第二次按下时隐藏它。
  • 这只是一个热修复。您需要探索为什么 timepicker.isHidden 第一次打印错误,而您似乎认为它已经被隐藏了
猜你喜欢
  • 2022-01-22
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2015-07-02
相关资源
最近更新 更多