2017-07-29 139 views
-1

我在故事板中有一个视图,默认情况下alpha设置为0.在某些情况下,Swift文件将alpha设置为1。在此视图之前只包含2个标签。我试图将2个按钮添加到视图中。iOS按钮可见,不可点击

由于某些原因,按钮根本无法点击。所以当你点击它时,按钮通常会在释放之前稍微改变颜色,或者按住按钮。但是由于某种原因,这种行为不会发生,并且连接到按钮的功能根本不会被调用。

这似乎是一个问题,重叠或在按钮上。该按钮是完全可见和启用,一切,但不可点击。我试过Debug View Hierarchy,但在该视图中一切看起来都正确。

任何想法,为什么会发生这种情况?

EDIT我试图使一类用下面的代码和在界面生成器设置在容器视图是该类。

class AnotherView: UIView { 
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 
     for view in self.subviews { 
      if view.isUserInteractionEnabled, view.point(inside: self.convert(point, to: view), with: event) { 
       return true 
      } 
     } 

     return false 
    } 
} 
+0

您是否在剧情板上勾选了“启用”和“用户交互已启用”选项? –

+0

@NicholasSmith是的,两者都检查 –

+0

@NicholasSmith哦,我意识到该视图已禁用“用户交互启用”。我没有意识到这是子视图所固有的。有没有办法只启用按钮而不是整个视图?它位于UITableView之上,所以我希望用户能够在表格视图上滚动,如果他们拖动标签。如果这是有道理的。 –

回答

2

hitTest(_:with:)method。当我们调用super.hitTest(point, with: event)时,超级调用返回nil,因为用户交互被禁用。因此,我们检查touchPoint是否在UIButton上,如果是,那么我们可以返回UIButton对象。这将消息发送到UIButton对象的选择器。

class AnotherView: UIView { 

    @IBOutlet weak var button:UIButton! 

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 
     let view = super.hitTest(point, with: event) 
     if self.button.frame.contains(point) { 
      return button 
     } 
     return view 
    } 

    @IBAction func buttnTapped(sender:UIButton) { 

    } 
}