必须按两次才能进行 Swift 3 按钮操作

Posted

技术标签:

【中文标题】必须按两次才能进行 Swift 3 按钮操作【英文标题】:Have to press twice for Swift 3 button action 【发布时间】: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 中。 【参考方案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 第一次打印错误,而您似乎认为它已经被隐藏了

以上是关于必须按两次才能进行 Swift 3 按钮操作的主要内容,如果未能解决你的问题,请参考以下文章

按两次 Enter 后完成弹出窗口关闭

为啥我需要按两次后退按钮才能第一次关闭片段?

MS Access:需要按两次退格键才能删除从 Excel 复制过来的一个字符

Android - VideoView 需要按两次 BACK 才能退出

Swift 3:TableView 刷新不适用于行操作

为啥我必须执行两次按钮功能才能使我的逻辑正常工作?