从第二个视图返回到一个视图时 UIButton 不可点击

Posted

技术标签:

【中文标题】从第二个视图返回到一个视图时 UIButton 不可点击【英文标题】:UIButton not clickable while returning to one view from second view 【发布时间】:2017-06-30 04:53:28 【问题描述】:

我有一个应用程序。我认为其中两种观点都有问题。第一个视图有三个按钮,一个排列在另一个下方。单击这三个中的任何一个将带我们进入具有 3 个 tableview 单元格的第二个视图。

问题是,如果我们转到第二个视图并返回第一个视图,第一个视图中的按钮是不可点击的。我正在附加两个视图的屏幕。

视图 1:有 3 个按钮。

视图 2:这些是表格视图单元格。

注意:表格视图单元格是可点击的。我们按下关闭按钮返回第一个视图。在第二个视图的左上角。

**问题简而言之:如果我们去视图2,点击'X'关闭按钮,视图1中的三个按钮,即fb、G+和Email都不能点击。 **

这是第一个视图中三个按钮的代码。

@IBAction func firstBtnAction(_ sender: Any) 
    let bounds = self.firstBtn.bounds
    UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [], animations: 
        self.firstBtn.bounds = CGRect(x: bounds.origin.x - 20, y: bounds.origin.y, width: bounds.size.width + 20, height: bounds.size.height)
        self.firstBtn.isEnabled = false
    , completion: nil)

    goaltype = "Conversion"

    UserGoal()



@IBAction func secondBtnAction(_ sender: Any) 
    let boundss = self.secondBtn.bounds
    UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [], animations: 
        self.secondBtn.bounds = CGRect(x: boundss.origin.x - 20, y: boundss.origin.y, width: boundss.size.width + 20, height: boundss.size.height)
        self.secondBtn.isEnabled = false
    , completion: nil)

    goaltype = "Engagement"

    UserGoal()



@IBAction func thirdBtnAction(_ sender: Any) 
    let bounds3 = self.thirdBtn.bounds
    UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [], animations: 
        self.thirdBtn.bounds = CGRect(x: bounds3.origin.x - 20, y: bounds3.origin.y, width: bounds3.size.width + 20, height: bounds3.size.height)
        self.thirdBtn.isEnabled = false
    , completion: nil)


    goaltype = "Storytelling"
    UserGoal()


第二个视图表视图单元格有一个小动画。

编辑 1:当我尝试添加 isEnabled = true 时,该按钮是可点击的。但是,由于动画,它会在每次点击时不断扩展。看图:

如何使按钮可点击?

【问题讨论】:

试试这个,在你的第一个视图控制器中设置视图中按钮 TRUE 的用户交互将出现方法。可能会有帮助。 你如何在这两个视图之间导航?? 从第一到第二——我们执行一个segue。从第二到第一,关闭视图控制器 为什么要为所有按钮设置isEnabled = false?返回第一个视图时启用它 删除这一行 -> self.thirdBtn.isEnabled = false 并尝试 【参考方案1】:

您正在为所有按钮设置isEnabled = false。返回第一个视图时启用它

self.firstBtn.isEnabled = true
self.secondBtn.isEnabled = true
self.thirdBtn.isEnabled = true

对于仅在动画时禁用按钮,请在完成块中启用它

UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [], animations: 
            self.thirdBtn.bounds = CGRect(x: bounds3.origin.x - 20, y: bounds3.origin.y, width: bounds3.size.width + 20, height: bounds3.size.height)
            self.thirdBtn.isEnabled = false
        )  (_ isCompleted) in
            self.thirdBtn.isEnabled = true
        

firstBtnsecondBtn 动画同样如此

【讨论】:

添加后,单击时按钮会水平展开。实际上,正如您在代码中看到的那样,我们有一个按钮动画。因此,对于每次单击,按钮都会水平扩展。有什么建议吗? 如果你想在动画时禁用按钮,那没关系。但您可以在动画的完成块中启用它。 尝试一下 :) 按钮工作。但按钮仍在展开 如果不想展开,动画宽度不要加+20。使用bounds3.size.width 而不是bounds3.size.width + 20

以上是关于从第二个视图返回到一个视图时 UIButton 不可点击的主要内容,如果未能解决你的问题,请参考以下文章

索引视图中完全外连接的替代方案

如何使用 extern NSString 将字符串值从第一个视图移动到第二个视图控制器

Objective C如何在从第一个VC移动到第二个时停止无限循环

大标题到常规标题并返回

Swift 5. 从第二个表格视图单元格(第二个 indexpath.row )显示数组

从第二个视图重定向